ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTk1OTliOC4uOTczNGIxZCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTIwMSw2ICsyMDEsOCBAQAogCiBXb2xmZ2FuZyBHcmFuZGVnZ2VyIDx3Z0BkZW54LmRlPgogCisJaXBlazAxCQlNUEM1MjAwCisKIAlDQ00JCU1QQzg1NQogCiAJUE42MgkJTVBDODI0MApAQCAtNTQzLDYgKzU0NSwxMCBAQAogCiAJQVQ5MVJNOTIwMERLCWF0OTFybTkyMDAKIAorUG8tWXUgQ2h1YW5nIDxyYXRiZXJ0QGZhcmFkYXktdGVjaC5jb20+CisKKwlhMzIwZXZiCQlGQTUyNiAoQVJNOTIwVC1saWtlKSAoYTMyMCBTb0MpCisKIEdlb3JnZSBHLiBEYXZpcyA8Z2RhdmlzQG12aXN0YS5jb20+CiAKIAlhc3NhYmV0CQlTQTExMDAKQEAgLTcxMiw2ICs3MTgsMTAgQEAKIAogCUIyCQlBUk03VERNSSAoUzNDNDRCMFgpCiAKK05pY2sgVGhvbXBzb24gPG5pY2sudGhvbXBzb25AZ2VmYW51Yy5jb20+CisKKwlkYTgzMGV2bQlBUk05MjZFSlMgKERBODMwL09NQVAtTDEzNykKKwogQWxiaW4gVG9ubmVycmUgPGFsYmluLnRvbm5lcnJlQGZyZWUtZWxlY3Ryb25zLmNvbT4KIAogCXNiYzM1X2E5ZzIwCUFSTTkyNkVKUyAoQVQ5MVNBTTlHMjAgU29DKQpkaWZmIC0tZ2l0IGEvTUFLRUFMTCBiL01BS0VBTEwKaW5kZXggZjljYWFiZC4uYWIxYmI2ZiAxMDA3NTUKLS0tIGEvTUFLRUFMTAorKysgYi9NQUtFQUxMCkBAIC02NCw2ICs2NCw3IEBACiAJaWNlY3ViZV81MTAwCVwKIAlpY2VjdWJlXzUyMDAJXAogCWlua2E0eDAJCVwKKwlpcGVrMDEJCVwKIAlsaXRlNTIwMGIJXAogCW1jYzIwMAkJXAogCW1lY3A1MjAwCVwKQEAgLTUzOSw2ICs1NDAsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBMSVNUX0FSTTk9IgkJCVwKKwlhMzIwZXZiCQkJXAogCWFwOTIwdAkJCVwKIAlhcDkyMl9YQTEwCQlcCiAJYXA5MjZlanMJCVwKQEAgLTU0OSw2ICs1NTEsNyBAQAogCWNwOTI2ZWpzCQlcCiAJY3A5NDZlcwkJCVwKIAljcDk2NgkJCVwKKwlkYTgzMGV2bQkJXAogCWlteDI3bGl0ZQkJXAogCWxwZDdhNDAwCQlcCiAJbXY4OGY2MjgxZ3R3X2dlCQlcCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDE5YjVhYzAuLjc1YjJjMWUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC02MDYsNiArNjA2LDkgQEAKIGlua2E0eDBfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSBpbmthNHgwIHBwYyBtcGM1eHh4IGlua2E0eDAKIAoraXBlazAxX2NvbmZpZzogdW5jb25maWcKKwlAJChNS0NPTkZJRykgLWEgaXBlazAxIHBwYyBtcGM1eHh4IGlwZWswMQorCiBsaXRlNTIwMGJfY29uZmlnCVwKIGxpdGU1MjAwYl9QTV9jb25maWcJXAogbGl0ZTUyMDBiX0xPV0JPT1RfY29uZmlnOgl1bmNvbmZpZwpAQCAtMjY5Myw2ICsyNjk2LDkgQEAKICMjIEFSTTkyeFQgU3lzdGVtcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCithMzIwZXZiX2NvbmZpZwk6CXVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyMHQgYTMyMGV2YiBmYXJhZGF5IGEzMjAKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgQXRtZWwgQVQ5MVJNOTIwMCBTeXN0ZW1zCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0yOTI3LDYgKzI5MzMsOSBAQAogY3AxMDI2X2NvbmZpZzogdW5jb25maWcKIAlAYm9hcmQvYXJtbHRkL2ludGVncmF0b3Ivc3BsaXRfYnlfdmFyaWFudC5zaCBjcCAkQAogCitkYTgzMGV2bV9jb25maWc6CXVuY29uZmlnCisJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgYXJtIGFybTkyNmVqcyBkYTgzMGV2bSBkYXZpbmNpIGRhdmluY2kKKwogZGF2aW5jaV9kdmV2bV9jb25maWcgOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIGFybSBhcm05MjZlanMgZHZldm0gZGF2aW5jaSBkYXZpbmNpCiAKZGlmZiAtLWdpdCBhL2JvYXJkL01hcnZlbGwvc2hlZXZhcGx1Zy9rd2JpbWFnZS5jZmcgYi9ib2FyZC9NYXJ2ZWxsL3NoZWV2YXBsdWcva3diaW1hZ2UuY2ZnCmluZGV4IDZjNDdkNjIuLjNiOWM1M2YgMTAwNjQ0Ci0tLSBhL2JvYXJkL01hcnZlbGwvc2hlZXZhcGx1Zy9rd2JpbWFnZS5jZmcKKysrIGIvYm9hcmQvTWFydmVsbC9zaGVldmFwbHVnL2t3YmltYWdlLmNmZwpAQCAtNzQsMTEgKzc0LDExIEBACiAjIGJpdDEyLTExOiBUVzJXCiAjIGJpdDMxLTEzOiB6ZXJvIHJlcXVpcmVkCiAKLURBVEEgMHhGRkQwMTQxMCAweDAwMDAwMDk5CSMgIEREUiBBZGRyZXNzIENvbnRyb2wKLSMgYml0MS0wOiAgIDAxLCBDczB3aWR0aD14MTYKLSMgYml0My0yOiAgIDEwLCBDczBzaXplPTUxMk1iCi0jIGJpdDUtNDogICAwMSwgQ3Mxd2lkdGg9eDE2Ci0jIGJpdDctNjogICAxMCwgQ3Mxc2l6ZT01MTJNYgorREFUQSAweEZGRDAxNDEwIDB4MDAwMDAwY2MJIyAgRERSIEFkZHJlc3MgQ29udHJvbAorIyBiaXQxLTA6ICAgMDAsIENzMHdpZHRoPXg4CisjIGJpdDMtMjogICAxMSwgQ3Mwc2l6ZT0xR2IKKyMgYml0NS00OiAgIDAwLCBDczF3aWR0aD14OAorIyBiaXQ3LTY6ICAgMTEsIENzMXNpemU9MUdiCiAjIGJpdDktODogICAwMCwgQ3Myd2lkdGg9bm9uZXhpc3RlbnQKICMgYml0MTEtMTA6IDAwLCBDczJzaXplID1ub25leGlzdGVudAogIyBiaXQxMy0xMjogMDAsIENzM3dpZHRoPW5vbmV4aXN0ZW50CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2FjYWRpYS9jb25maWcubWsgYi9ib2FyZC9hbWNjL2FjYWRpYS9jb25maWcubWsKaW5kZXggMjkwNDE1Yy4uMDFkYjQxYyAxMDA2NDQKLS0tIGEvYm9hcmQvYW1jYy9hY2FkaWEvY29uZmlnLm1rCisrKyBiL2JvYXJkL2FtY2MvYWNhZGlhL2NvbmZpZy5tawpAQCAtMzQsMyArMzQsNyBAQAogaWZlcSAoJChkZWJ1ZyksMSkKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1EREVCVUcKIGVuZGlmCisKK2lmZGVmIENPTkZJR19OQU5EX1VfQk9PVAorTERTQ1JJUFQgOj0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC1uYW5kLmxkcworZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvYWNhZGlhL3UtYm9vdC5sZHMgYi9ib2FyZC9hbWNjL2FjYWRpYS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzcyMDBkLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2FtY2MvYWNhZGlhL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9iYW1ib28vYmFtYm9vLmMgYi9ib2FyZC9hbWNjL2JhbWJvby9iYW1ib28uYwppbmRleCAyNTk4ZjJjLi5jOTBmODZiIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2JhbWJvby9iYW1ib28uYworKysgYi9ib2FyZC9hbWNjL2JhbWJvby9iYW1ib28uYwpAQCAtNDY2LDE2NiArNDY2LDYgQEAKICNlbmRpZgogfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV9wcmVfaW5pdAotICoKLSAqICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGp1c3QgcHJpb3IgdG8gcmVnaXN0ZXJpbmcgdGhlIGhvc2UgYW5kIGdpdmVzCi0gKiAgdGhlIGJvYXJkIHRoZSBvcHBvcnR1bml0eSB0byBjaGVjayB0aGluZ3MuIFJldHVybmluZyBhIHZhbHVlIG9mIHplcm8KLSAqICBpbmRpY2F0ZXMgdGhhdCB0aGluZ3MgYXJlIGJhZCAmIFBDSSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgYWJvcnRlZC4KLSAqCi0gKglEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCi0gKgkoYWRkIHJlZ2lvbnMsIG92ZXJyaWRlIGRlZmF1bHQgYWNjZXNzIHJvdXRpbmVzLCBldGMpIG9yIHBlcmZvcm0KLSAqCWNlcnRhaW4gcHJlLWluaXRpYWxpemF0aW9uIGFjdGlvbnMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi1pbnQgcGNpX3ByZV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICB8IFNldCBwcmlvcml0eSBmb3IgYWxsIFBMQjMgZGV2aWNlcyB0byAwLgotCSAgfCBTZXQgUExCMyBhcmJpdGVyIHRvIGZhaXIgbW9kZS4KLQkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQltZnNkcihTRDBfQU1QMSwgYWRkcik7Ci0JbXRzZHIoU0QwX0FNUDEsIChhZGRyICYgMHgwMDAwMDBGRikgfCAweDAwMDBGRjAwKTsKLQlhZGRyID0gbWZkY3IoUExCM19BQ1IpOwotCW10ZGNyKFBMQjNfQUNSLCBhZGRyIHwgMHg4MDAwMDAwMCk7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICB8IFNldCBwcmlvcml0eSBmb3IgYWxsIFBMQjQgZGV2aWNlcyB0byAwLgotCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW1mc2RyKFNEMF9BTVAwLCBhZGRyKTsKLQltdHNkcihTRDBfQU1QMCwgKGFkZHIgJiAweDAwMDAwMEZGKSB8IDB4MDAwMEZGMDApOwotCWFkZHIgPSBtZmRjcihQTEI0X0FDUikgfCAweGEwMDAwMDAwOwkvKiBXYXMgMHg4LS0tLSAqLwotCW10ZGNyKFBMQjRfQUNSLCBhZGRyKTsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgIHwgU2V0IE5lYnVsYSBQTEI0IGFyYml0ZXIgdG8gZmFpciBtb2RlLgotCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCS8qIFNlZ21lbnQwICovCi0JYWRkciA9IChtZmRjcihQTEIwX0FDUikgJiB+UExCMF9BQ1JfUFBNX01BU0spIHwgUExCMF9BQ1JfUFBNX0ZBSVI7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX0hCVV9NQVNLKSB8IFBMQjBfQUNSX0hCVV9FTkFCTEVEOwotCWFkZHIgPSAoYWRkciAmIH5QTEIwX0FDUl9SRFBfTUFTSykgfCBQTEIwX0FDUl9SRFBfNERFRVA7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX1dSUF9NQVNLKSB8IFBMQjBfQUNSX1dSUF8yREVFUDsKLQltdGRjcihQTEIwX0FDUiwgYWRkcik7Ci0KLQkvKiBTZWdtZW50MSAqLwotCWFkZHIgPSAobWZkY3IoUExCMV9BQ1IpICYgflBMQjFfQUNSX1BQTV9NQVNLKSB8IFBMQjFfQUNSX1BQTV9GQUlSOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9IQlVfTUFTSykgfCBQTEIxX0FDUl9IQlVfRU5BQkxFRDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMV9BQ1JfUkRQX01BU0spIHwgUExCMV9BQ1JfUkRQXzRERUVQOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9XUlBfTUFTSykgfCBQTEIxX0FDUl9XUlBfMkRFRVA7Ci0JbXRkY3IoUExCMV9BQ1IsIGFkZHIpOwotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiBTZXQgdXAgRGlyZWN0IE1NSU8gcmVnaXN0ZXJzCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgIHwgUG93ZXJQQzQ0MCBFUCBQQ0kgTWFzdGVyIGNvbmZpZ3VyYXRpb24uCi0JICB8IE1hcCBvbmUgMUdpZyByYW5nZSBvZiBQTEIvcHJvY2Vzc29yIGFkZHJlc3NlcyB0byBQQ0kgbWVtb3J5IHNwYWNlLgotCSAgfCAgIFBMQiBhZGRyZXNzIDB4QTAwMDAwMDAtMHhERkZGRkZGRiA9PT4gUENJIGFkZHJlc3MgMHhBMDAwMDAwMC0weERGRkZGRkZGCi0JICB8ICAgVXNlIGJ5dGUgcmV2ZXJzZWQgb3V0IHJvdXRpbmVzIHRvIGhhbmRsZSBlbmRpYW5lc3MuCi0JICB8IE1ha2UgdGhpcyByZWdpb24gbm9uLXByZWZldGNoYWJsZS4KLQkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MzJyKFBDSUwwX1BNTTBNQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgTWFzay9BdHRyaWJ1dGUgLSBkaXNhYmxlZCBiNCBzZXR0aW5nICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRSk7CS8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0wUENJTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UpOwkvKiBQTU0wIFBDSSBMb3cgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0wUENJSEEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NME1BLCAweEUwMDAwMDAxKTsJLyogNTEyTSArIE5vIHByZWZldGNoaW5nLCBhbmQgZW5hYmxlIHJlZ2lvbiAqLwotCi0Jb3V0MzJyKFBDSUwwX1BNTTFNQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgTWFzay9BdHRyaWJ1dGUgLSBkaXNhYmxlZCBiNCBzZXR0aW5nICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRTIpOyAvKiBQTU0wIExvY2FsIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMVBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFMik7CS8qIFBNTTAgUENJIExvdyBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFQQ0lIQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgUENJIEhpZ2ggQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0xTUEsIDB4RTAwMDAwMDEpOwkvKiA1MTJNICsgTm8gcHJlZmV0Y2hpbmcsIGFuZCBlbmFibGUgcmVnaW9uICovCi0KLQlvdXQzMnIoUENJTDBfUFRNMU1TLCAweDAwMDAwMDAxKTsJLyogTWVtb3J5IFNpemUvQXR0cmlidXRlICovCi0Jb3V0MzJyKFBDSUwwX1BUTTFMQSwgMCk7CS8qIExvY2FsIEFkZHIuIFJlZyAqLwotCW91dDMycihQQ0lMMF9QVE0yTVMsIDApOwkvKiBNZW1vcnkgU2l6ZS9BdHRyaWJ1dGUgKi8KLQlvdXQzMnIoUENJTDBfUFRNMkxBLCAwKTsJLyogTG9jYWwgQWRkci4gUmVnICovCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFNldCB1cCBDb25maWd1cmF0aW9uIHJlZ2lzdGVycwotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0JLyogUHJvZ3JhbSB0aGUgYm9hcmQncyBzdWJzeXN0ZW0gaWQvdmVuZG9yIGlkICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAotCQkJICAgICAgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX1NVQlNZU1RFTV9JRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0lEKTsKLQotCS8qIENvbmZpZ3VyZSBjb21tYW5kIHJlZ2lzdGVyIGFzIGJ1cyBtYXN0ZXIgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsIFBDSV9DT01NQU5EX01BU1RFUik7Ci0KLQkvKiAyNDBuUyBQQ0kgY2xvY2sgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0xBVEVOQ1lfVElNRVIsIDEpOwotCi0JLyogTm8gZXJyb3IgcmVwb3J0aW5nICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9FUlJFTiwgMCk7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKDAsIFBDSV9CUkRHT1BUMiwgMHgwMDAwMDEwMSk7Ci0KLX0KLSNlbmRpZgkJCQkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX21hc3Rlcl9pbml0Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfTUFTVEVSX0lOSVQpCi12b2lkIHBjaV9tYXN0ZXJfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JdW5zaWduZWQgc2hvcnQgdGVtcF9zaG9ydDsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICB8IFdyaXRlIHRoZSBQb3dlclBDNDQwIEVQIFBDSSBDb25maWd1cmF0aW9uIHJlZ3MuCi0JICB8ICAgRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYmUgYSBtYXN0ZXIgb24gdGhlIFBDSSBidXMgKFBNTSkuCi0JICB8ICAgRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYWN0IGFzIGEgUENJIG1lbW9yeSB0YXJnZXQgKFBUTSkuCi0JICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCAmdGVtcF9zaG9ydCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELAotCQkJICAgICAgdGVtcF9zaG9ydCB8IFBDSV9DT01NQU5EX01BU1RFUiB8Ci0JCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkpOwotfQotI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9NQVNURVJfSU5JVCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBpc19wY2lfaG9zdAotICoKLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCi0gKglwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKLSAqCVBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCi0gKgliaXQgaW4gdGhlIHN0cmFwIHJlZ2lzdGVyLCBvciBnZW5lcmljIGhvc3QvYWRhcHRlciBhc3N1bXB0aW9ucy4KLSAqCi0gKglSYXRoZXIgdGhhbiBoYXJkLWNvZGUgYSBiYWQgYXNzdW1wdGlvbiBpbiB0aGUgZ2VuZXJhbCA0NDAgY29kZSwgdGhlCi0gKgk0NDAgcGNpIGNvZGUgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGRlY2lkZSBhdCBydW50aW1lLgotICoKLSAqCVJldHVybiAwIGZvciBhZGFwdGVyIG1vZGUsIG5vbi16ZXJvIGZvciBob3N0IChtb25hcmNoKSBtb2RlLgotICoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBpc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyogQmFtYm9vIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCi0JcmV0dXJuICgxKTsKLX0KLSNlbmRpZgkJCQkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgfCBpc19wb3dlcnBjNDQwZXBfcGFzczEuCiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvYmFtYm9vL2NvbmZpZy5tayBiL2JvYXJkL2FtY2MvYmFtYm9vL2NvbmZpZy5tawppbmRleCBhMzc2MzZhLi43MmI2YmMwIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2JhbWJvby9jb25maWcubWsKKysrIGIvYm9hcmQvYW1jYy9iYW1ib28vY29uZmlnLm1rCkBAIC0zNiwzICszNiw3IEBACiBpZmVxICgkKGRiY3IpLDEpCiBQTEFURk9STV9DUFBGTEFHUyArPSAtRENPTkZJR19TWVNfSU5JVF9EQkNSPTB4OGNmZjAwMDAKIGVuZGlmCisKK2lmZGVmIENPTkZJR19OQU5EX1VfQk9PVAorTERTQ1JJUFQgOj0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC1uYW5kLmxkcworZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvYmFtYm9vL3UtYm9vdC5sZHMgYi9ib2FyZC9hbWNjL2JhbWJvby91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2RlNTM0Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2FtY2MvYmFtYm9vL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC5ib290cGcgMHhGRkZGRjAwMCA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC5ib290cGcpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvYW1jYy9iYW1ib28vaW5pdC5vCSgudGV4dCkKLSAgICBib2FyZC9hbWNjL2JhbWJvby9iYW1ib28ubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotCi0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2J1YmluZ2EvdS1ib290LmxkcyBiL2JvYXJkL2FtY2MvYnViaW5nYS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzcyMDBkLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2FtY2MvYnViaW5nYS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvY2FueW9ubGFuZHMvY2FueW9ubGFuZHMuYyBiL2JvYXJkL2FtY2MvY2FueW9ubGFuZHMvY2FueW9ubGFuZHMuYwppbmRleCA5MWZhZTE5Li4xM2EwZGFjIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2NhbnlvbmxhbmRzL2NhbnlvbmxhbmRzLmMKKysrIGIvYm9hcmQvYW1jYy9jYW55b25sYW5kcy9jYW55b25sYW5kcy5jCkBAIC0zMjYsMTQxICszMjYsMTcgQEAKIH0KICNlbmRpZgogCi0vKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBob3NlICkKLXsKLQkvKgotCSAqIERpc2FibGUgZXZlcnl0aGluZwotCSAqLwotCW91dF9sZTMyKCh2b2lkICopUENJTDBfUElNMFNBLCAwKTsgLyogZGlzYWJsZSAqLwotCW91dF9sZTMyKCh2b2lkICopUENJTDBfUElNMVNBLCAwKTsgLyogZGlzYWJsZSAqLwotCW91dF9sZTMyKCh2b2lkICopUENJTDBfUElNMlNBLCAwKTsgLyogZGlzYWJsZSAqLwotCW91dF9sZTMyKCh2b2lkICopUENJTDBfRVJPTUJBLCAwKTsgLyogZGlzYWJsZSBleHBhbnNpb24gcm9tICovCi0KLQkvKgotCSAqIE1hcCBhbGwgb2YgU0RSQU0gdG8gUENJIGFkZHJlc3MgMHgwMDAwXzAwMDAuIE5vdGUgdGhhdCB0aGUgNDQwCi0JICogc3RyYXBwaW5nIG9wdGlvbnMgdG8gbm90IHN1cHBvcnQgc2l6ZXMgc3VjaCBhcyAxMjgvMjU2IE1CLgotCSAqLwotCW91dF9sZTMyKCh2b2lkICopUENJTDBfUElNMExBTCwgQ09ORklHX1NZU19TRFJBTV9CQVNFKTsKLQlvdXRfbGUzMigodm9pZCAqKVBDSUwwX1BJTTBMQUgsIDApOwotCW91dF9sZTMyKCh2b2lkICopUENJTDBfUElNMFNBLCB+KGdkLT5yYW1fc2l6ZSAtIDEpIHwgMSk7Ci0Jb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9CQVIwLCAwKTsKLQotCS8qCi0JICogUHJvZ3JhbSB0aGUgYm9hcmQncyBzdWJzeXN0ZW0gaWQvdmVuZG9yIGlkCi0JICovCi0Jb3V0X2xlMTYoKHZvaWQgKilQQ0lMMF9TQlNZU1ZJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEKTsKLQlvdXRfbGUxNigodm9pZCAqKVBDSUwwX1NCU1lTSUQsIENPTkZJR19TWVNfUENJX1NVQlNZU19ERVZJQ0VJRCk7Ci0KLQlvdXRfbGUxNigodm9pZCAqKVBDSUwwX0NNRCwgaW4xNnIoUENJTDBfQ01EKSB8IFBDSV9DT01NQU5EX01FTU9SWSk7Ci19Ci0jZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKSAqLwotCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQotLyoKLSAqIGlzX3BjaV9ob3N0Ci0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYSBwY2kgc2NhbiBzaG91bGQgYmUKLSAqIHBlcmZvcm1lZC4gV2l0aCB2YXJpb3VzIGhhcmR3YXJlIGVudmlyb25tZW50cyAoZXNwZWNpYWxseSBjUENJIGFuZAotICogUFBNQykgaXQncyBpbnN1ZmZpY2llbnQgdG8gZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYXJiaXRlciBlbmFibGUKLSAqIGJpdCBpbiB0aGUgc3RyYXAgcmVnaXN0ZXIsIG9yIGdlbmVyaWMgaG9zdC9hZGFwdGVyIGFzc3VtcHRpb25zLgotICoKLSAqIFJhdGhlciB0aGFuIGhhcmQtY29kZSBhIGJhZCBhc3N1bXB0aW9uIGluIHRoZSBnZW5lcmFsIDQ0MCBjb2RlLCB0aGUKLSAqIDQ0MCBwY2kgY29kZSByZXF1aXJlcyB0aGUgYm9hcmQgdG8gZGVjaWRlIGF0IHJ1bnRpbWUuCi0gKgotICogUmV0dXJuIDAgZm9yIGFkYXB0ZXIgbW9kZSwgbm9uLXplcm8gZm9yIGhvc3QgKG1vbmFyY2gpIG1vZGUuCi0gKi8KLWludCBpc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCitpbnQgYm9hcmRfcGNpZV9maXJzdCh2b2lkKQogewotCS8qIEJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCi0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBwY2llX2hvc2VbMl0gPSB7ezB9LHswfX07Ci0KLXZvaWQgcGNpZV9zZXR1cF9ob3NlcyhpbnQgYnVzbm8pCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCWludCBpLCBidXM7Ci0JaW50IHJldCA9IDA7Ci0JY2hhciAqZW52OwotCXVuc2lnbmVkIGludCBkZWxheTsKLQlpbnQgc3RhcnQ7Ci0KLQkvKgotCSAqIGFzc3VtZSB3ZSdyZSBjYWxsZWQgYWZ0ZXIgdGhlIFBDSVggaG9zZSBpcyBpbml0aWFsaXplZCwgd2hpY2ggdGFrZXMKLQkgKiBidXMgSUQgMCBhbmQgdGhlcmVmb3JlIHN0YXJ0IG51bWJlcmluZyBQQ0llJ3MgZnJvbSAxLgotCSAqLwotCWJ1cyA9IGJ1c25vOwotCiAJLyoKIAkgKiBDYW55b25sYW5kcyB3aXRoIFNBVEEgZW5hYmxlZCBoYXMgb25seSBvbmUgUENJZSBzbG90CiAJICogKDJuZCBvbmUpLgogCSAqLwogCWlmIChnZC0+Ym9hcmRfdHlwZSA9PSBCT0FSRF9DQU5ZT05MQU5EU19TQVRBKQotCQlzdGFydCA9IDE7Ci0JZWxzZQotCQlzdGFydCA9IDA7Ci0KLQlmb3IgKGkgPSBzdGFydDsgaSA8PSAxOyBpKyspIHsKLQotCQlpZiAoaXNfZW5kX3BvaW50KGkpKQotCQkJcmV0ID0gcHBjNHh4X2luaXRfcGNpZV9lbmRwb3J0KGkpOwotCQllbHNlCi0JCQlyZXQgPSBwcGM0eHhfaW5pdF9wY2llX3Jvb3Rwb3J0KGkpOwotCQlpZiAocmV0ID09IC1FTk9ERVYpCi0JCQljb250aW51ZTsKLQkJaWYgKHJldCkgewotCQkJcHJpbnRmKCJQQ0lFJWQ6IGluaXRpYWxpemF0aW9uIGFzICVzIGZhaWxlZFxuIiwgaSwKLQkJCSAgICAgICBpc19lbmRfcG9pbnQoaSkgPyAiZW5kcG9pbnQiIDogInJvb3QtY29tcGxleCIpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlob3NlID0gJnBjaWVfaG9zZVtpXTsKLQkJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXM7Ci0JCWhvc2UtPmxhc3RfYnVzbm8gPSBidXM7Ci0JCWhvc2UtPmN1cnJlbnRfYnVzbm8gPSBidXM7Ci0KLQkJLyogc2V0dXAgbWVtIHJlc291cmNlICovCi0JCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAwLAotCQkJICAgICAgIENPTkZJR19TWVNfUENJRV9NRU1CQVNFICsgaSAqIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAotCQkJICAgICAgIENPTkZJR19TWVNfUENJRV9NRU1CQVNFICsgaSAqIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAotCQkJICAgICAgIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAotCQkJICAgICAgIFBDSV9SRUdJT05fTUVNKTsKLQkJaG9zZS0+cmVnaW9uX2NvdW50ID0gMTsKLQkJcGNpX3JlZ2lzdGVyX2hvc2UoaG9zZSk7Ci0KLQkJaWYgKGlzX2VuZF9wb2ludChpKSkgewotCQkJcHBjNHh4X3NldHVwX3BjaWVfZW5kcG9pbnQoaG9zZSwgaSk7Ci0JCQkvKgotCQkJICogUmVzb24gZm9yIG5vIHNjYW5uaW5nIGlzIGVuZHBvaW50IGNhbiBub3QgZ2VuZXJhdGUKLQkJCSAqIHVwc3RyZWFtIGNvbmZpZ3VyYXRpb24gYWNjZXNzZXMuCi0JCQkgKi8KLQkJfSBlbHNlIHsKLQkJCXBwYzR4eF9zZXR1cF9wY2llX3Jvb3Rwb2ludChob3NlLCBpKTsKLQkJCWVudiA9IGdldGVudiAoInBjaXNjYW5kZWxheSIpOwotCQkJaWYgKGVudiAhPSBOVUxMKSB7Ci0JCQkJZGVsYXkgPSBzaW1wbGVfc3RydG91bChlbnYsIE5VTEwsIDEwKTsKLQkJCQlpZiAoZGVsYXkgPiA1KQotCQkJCQlwcmludGYoIldhcm5pbmcsIGV4cGVjdCBub3RpY2FibGUgZGVsYXkgYmVmb3JlICIKLQkJCQkJICAgICAgICJQQ0llIHNjYW4gZHVlIHRvICdwY2lzY2FuZGVsYXknIHZhbHVlIVxuIik7Ci0JCQkJbWRlbGF5KGRlbGF5ICogMTAwMCk7Ci0JCQl9CisJCXJldHVybiAxOwogCi0JCQkvKgotCQkJICogQ29uZmlnIGFjY2VzcyBjYW4gb25seSBnbyBkb3duIHN0cmVhbQotCQkJICovCi0JCQlob3NlLT5sYXN0X2J1c25vID0gcGNpX2hvc2Vfc2Nhbihob3NlKTsKLQkJCWJ1cyA9IGhvc2UtPmxhc3RfYnVzbm8gKyAxOwotCQl9Ci0JfQorCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIApkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9jYW55b25sYW5kcy9jb25maWcubWsgYi9ib2FyZC9hbWNjL2NhbnlvbmxhbmRzL2NvbmZpZy5tawppbmRleCA1NTFhODE3Li43YTU4NjY1IDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2NhbnlvbmxhbmRzL2NvbmZpZy5taworKysgYi9ib2FyZC9hbWNjL2NhbnlvbmxhbmRzL2NvbmZpZy5tawpAQCAtMzksMyArMzksNyBAQAogaWZlcSAoJChkYmNyKSwxKQogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfU1lTX0lOSVRfREJDUj0weDhjZmYwMDAwCiBlbmRpZgorCitpZmRlZiBDT05GSUdfTkFORF9VX0JPT1QKK0xEU0NSSVBUIDo9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QtbmFuZC5sZHMKK2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2NhbnlvbmxhbmRzL3UtYm9vdC5sZHMgYi9ib2FyZC9hbWNjL2NhbnlvbmxhbmRzL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZmI4YjguLjAwMDAwMDAKLS0tIGEvYm9hcmQvYW1jYy9jYW55b25sYW5kcy91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDgKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAuYm9vdHBnIDB4RkZGRkYwMDAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSguYm9vdHBnKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL2FtY2MvY2FueW9ubGFuZHMvaW5pdC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvZWJvbnkvZWJvbnkuYyBiL2JvYXJkL2FtY2MvZWJvbnkvZWJvbnkuYwppbmRleCAwY2ExYWNjLi45MjNkYmNhIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2Vib255L2Vib255LmMKKysrIGIvYm9hcmQvYW1jYy9lYm9ueS9lYm9ueS5jCkBAIC0xNjQsOTYgKzE2NCwzIEBACiAJcmV0dXJuICgxMjggKiAxMDI0ICogMTAyNCk7CS8qIDEyOCBNQiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiB9CiAjZW5kaWYJCQkJLyogIWRlZmluZWQoQ09ORklHX1NQRF9FRVBST00pICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX3ByZV9pbml0Ci0gKgotICogIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKLSAqICB0aGUgYm9hcmQgdGhlIG9wcG9ydHVuaXR5IHRvIGNoZWNrIHRoaW5ncy4gUmV0dXJuaW5nIGEgdmFsdWUgb2YgemVybwotICogIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgotICoKLSAqCURpZmZlcmVudCBib2FyZHMgbWF5IHdpc2ggdG8gY3VzdG9taXplIHRoZSBwY2kgY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqCShhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQotICoJY2VydGFpbiBwcmUtaW5pdGlhbGl6YXRpb24gYWN0aW9ucy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXVuc2lnbmVkIGxvbmcgc3RyYXA7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFRoZSBlYm9ueSBib2FyZCBpcyBhbHdheXMgY29uZmlndXJlZCBhcyB0aGUgaG9zdCAmIHJlcXVpcmVzIHRoZQotCSAqIFBDSSBhcmJpdGVyIHRvIGJlIGVuYWJsZWQuCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jc3RyYXAgPSBtZmRjcihDUEMwX1NUUlAxKTsKLQlpZiAoKHN0cmFwICYgMHgwMDEwMDAwMCkgPT0gMCkgewotCQlwcmludGYoIlBDSTogQ1BDMF9TVFJQMVtQQUVdIG5vdCBzZXQuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiBEaXNhYmxlIGV2ZXJ5dGhpbmcKLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlvdXQzMnIoUENJTDBfUElNMFNBLCAwKTsJLyogZGlzYWJsZSAqLwotCW91dDMycihQQ0lMMF9QSU0xU0EsIDApOwkvKiBkaXNhYmxlICovCi0Jb3V0MzJyKFBDSUwwX1BJTTJTQSwgMCk7CS8qIGRpc2FibGUgKi8KLQlvdXQzMnIoUENJTDBfRVJPTUJBLCAwKTsJLyogZGlzYWJsZSBleHBhbnNpb24gcm9tICovCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIE1hcCBhbGwgb2YgU0RSQU0gdG8gUENJIGFkZHJlc3MgMHgwMDAwXzAwMDAuIE5vdGUgdGhhdCB0aGUgNDQwIHN0cmFwcGluZwotICAgICAqIG9wdGlvbnMgdG8gbm90IHN1cHBvcnQgc2l6ZXMgc3VjaCBhcyAxMjgvMjU2IE1CLgotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDMycihQQ0lMMF9QSU0wTEFMLCBDT05GSUdfU1lTX1NEUkFNX0JBU0UpOwotCW91dDMycihQQ0lMMF9QSU0wTEFILCAwKTsKLQlvdXQzMnIoUENJTDBfUElNMFNBLCB+KGdkLT5yYW1fc2l6ZSAtIDEpIHwgMSk7Ci0KLQlvdXQzMnIoUENJTDBfQkFSMCwgMCk7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZAotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDE2cihQQ0lMMF9TQlNZU1ZJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEKTsKLQlvdXQxNnIoUENJTDBfU0JTWVNJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0RFVklDRUlEKTsKLQotCW91dDE2cihQQ0lMMF9DTUQsIGluMTZyKFBDSUwwX0NNRCkgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOwotfQotI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBpc19wY2lfaG9zdAotICoKLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCi0gKglwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKLSAqCVBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCi0gKgliaXQgaW4gdGhlIHN0cmFwIHJlZ2lzdGVyLCBvciBnZW5lcmljIGhvc3QvYWRhcHRlciBhc3N1bXB0aW9ucy4KLSAqCi0gKglSYXRoZXIgdGhhbiBoYXJkLWNvZGUgYSBiYWQgYXNzdW1wdGlvbiBpbiB0aGUgZ2VuZXJhbCA0NDAgY29kZSwgdGhlCi0gKgk0NDAgcGNpIGNvZGUgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGRlY2lkZSBhdCBydW50aW1lLgotICoKLSAqCVJldHVybiAwIGZvciBhZGFwdGVyIG1vZGUsIG5vbi16ZXJvIGZvciBob3N0IChtb25hcmNoKSBtb2RlLgotICoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBpc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyogVGhlIGVib255IGJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCi0JcmV0dXJuICgxKTsKLX0KLSNlbmRpZgkJCQkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2Vib255L3UtYm9vdC5sZHMgYi9ib2FyZC9hbWNjL2Vib255L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYjJlNmMuLjAwMDAwMDAKLS0tIGEvYm9hcmQvYW1jYy9lYm9ueS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAuYm9vdHBnIDB4RkZGRkYwMDAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSguYm9vdHBnKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL2FtY2MvZWJvbnkvaW5pdC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2thdG1haS9NYWtlZmlsZSBiL2JvYXJkL2FtY2Mva2F0bWFpL01ha2VmaWxlCmluZGV4IDMxODAxNmQuLjE2OGJhYjUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2Mva2F0bWFpL01ha2VmaWxlCisrKyBiL2JvYXJkL2FtY2Mva2F0bWFpL01ha2VmaWxlCkBAIC0yNSw5ICsyNSwxMSBAQAogCiBMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCiAKLUNPQkpTCT0gJChCT0FSRCkubyBjbWRfa2F0bWFpLm8KK0NPQkpTLXkJOj0gJChCT0FSRCkubworQ09CSlMtJChDT05GSUdfQ01EX0NISVBfQ09ORklHKSArPSBjaGlwX2NvbmZpZy5vCiBTT0JKUwk9IGluaXQubwogCitDT0JKUyAgIDo9ICQoQ09CSlMteSkKIFNSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQogU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9rYXRtYWkvY2hpcF9jb25maWcuYyBiL2JvYXJkL2FtY2Mva2F0bWFpL2NoaXBfY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhZjM3OAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2FtY2Mva2F0bWFpL2NoaXBfY29uZmlnLmMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOQorICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3BwYzR4eF9jb25maWcuaD4KKworc3RydWN0IHBwYzR4eF9jb25maWcgcHBjNHh4X2NvbmZpZ192YWxbXSA9IHsKKwl7CisJCSI0MDAtMTMzIiwiQ1BVOiA0MDAgUExCOiAxMzMgT1BCOiAgNjYgRUJDOiAgNjYiLAorCQl7IDB4ODYsIDB4NzgsIDB4YzIsIDB4YzYsIDB4MDUsIDB4YTUsIDB4MDQsIDB4ZTEgfQorCX0sCisJeworCQkiNTAwLTE2NiIsIkNQVTogNTAwIFBMQjogMTY2IE9QQjogIDgzIEVCQzogIDgzIiwKKwkJeyAweDg3LCAweDc4LCAweGYyLCAweGM2LCAweDA1LCAweGE1LCAweDA0LCAweGUxIH0KKwl9LAorCXsKKwkJIjUzMy0xMzMiLCJDUFU6IDUzMyBQTEI6IDEzMyBPUEI6ICA2NiBFQkM6ICA2NiIsCisJCXsgMHg4NywgMHg3OSwgMHgwMiwgMHg1MiwgMHgwNSwgMHhhNSwgMHgwNCwgMHhlMSB9CisJfSwKKwl7CisJCSI2NjctMTMzIiwiQ1BVOiA2NjcgUExCOiAxMzMgT1BCOiAgNjYgRUJDOiAgNjYiLAorCQl7IDB4ODcsIDB4NzksIDB4NDIsIDB4NTYsIDB4MDUsIDB4YTUsIDB4MDQsIDB4ZTEgfQorCX0sCisJeworCQkiNjY3LTE2NiIsIkNQVTogNjY3IFBMQjogMTY2IE9QQjogIDgzIEVCQzogIDgzIiwKKwkJeyAweDg3LCAweDc5LCAweDQyLCAweDA2LCAweDA1LCAweGE1LCAweDA0LCAweGUxIH0KKwl9LAorCXsKKwkJIjgwMC0xNjAiLCJDUFU6IDgwMCBQTEI6IDE2MCBPUEI6ICA1MyBFQkM6ICAxNyIsCisJCXsgMHg4NiwgMHg3OSwgMHg4MSwgMHhhNywgMHgwNywgMHhhNSwgMHgwNCwgMHhlMSB9CisJfSwKK307CisKK2ludCBwcGM0eHhfY29uZmlnX2NvdW50ID0gQVJSQVlfU0laRShwcGM0eHhfY29uZmlnX3ZhbCk7CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL2thdG1haS9jbWRfa2F0bWFpLmMgYi9ib2FyZC9hbWNjL2thdG1haS9jbWRfa2F0bWFpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNWQzMGMuLjAwMDAwMDAKLS0tIGEvYm9hcmQvYW1jYy9rYXRtYWkvY21kX2thdG1haS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE4ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDcKLSAqIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGNvbW1hbmQuaD4KLSNpbmNsdWRlIDxpMmMuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLSNkZWZpbmUJQ09ORklHX1NUUkVTUwkJLyogZW5hYmxlIDY2NyBNSHogQ1BVIGZyZXEgc2VsZWN0aW9uICovCi0jZGVmaW5lIERFQlVHCi0KLXN0YXRpYyBpbnQgZG9fYm9vdHN0cmFwKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCXVjaGFyCWNoaXA7Ci0JdWxvbmcJZGF0YTsKLQlpbnQJbmJ5dGVzOwotCWV4dGVybiBjaGFyIGNvbnNvbGVfYnVmZmVyW107Ci0KLQljaGFyIHN5c0Nsb2NrWzRdOwotCWNoYXIgY3B1Q2xvY2tbNF07Ci0JY2hhciBwbGJDbG9ja1s0XTsKLQljaGFyIHBjaXhDbG9ja1s0XTsKLQotCWlmIChhcmdjIDwgMykgewotCQljbWRfdXNhZ2UoY21kdHApOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoc3RyY21wKGFyZ3ZbMl0sICJwcm9tMCIpID09IDApCi0JCWNoaXAgPSBJSUMwX0JPT1RQUk9NX0FERFI7Ci0JZWxzZQotCQljaGlwID0gSUlDMF9BTFRfQk9PVFBST01fQUREUjsKLQotCS8qIG9uIEthdG1haSBTeXNDbGsgaXMgYWx3YXlzIDMzTUh6ICovCi0Jc3RyY3B5KHN5c0Nsb2NrLCAiMzMiKTsKLQotCWRvIHsKLSNpZmRlZglDT05GSUdfU1RSRVNTCi0JCXByaW50ZigiZW50ZXIgY3B1IGNsb2NrIGZyZXF1ZW5jeSA0MDAsIDUwMCwgNTMzLCA2NjcgTUh6IG9yIHF1aXQgdG8gYWJvcnRcbiIpOwotI2Vsc2UKLQkJcHJpbnRmKCJlbnRlciBjcHUgY2xvY2sgZnJlcXVlbmN5IDQwMCwgNTAwLCA1MzMgTUh6IG9yIHF1aXQgdG8gYWJvcnRcbiIpOwotI2VuZGlmCi0JCW5ieXRlcyA9IHJlYWRsaW5lICgiID8gIik7Ci0KLQkJaWYgKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgInF1aXQiKSA9PSAwKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKChzdHJjbXAoY29uc29sZV9idWZmZXIsICI0MDAiKSAhPSAwKSAmJgotCQkgICAgKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjUwMCIpICE9IDApICYmCi0JCSAgICAoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAiNTMzIikgIT0gMCkKLSNpZmRlZglDT05GSUdfU1RSRVNTCi0JCSAgICAmJiAoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAiNjY3IikgIT0gMCkKLSNlbmRpZgotCQkJKSB7Ci0JCQluYnl0ZXMgPSAwOwotCQl9Ci0KLQkJc3RyY3B5KGNwdUNsb2NrLCBjb25zb2xlX2J1ZmZlcik7Ci0KLQl9IHdoaWxlIChuYnl0ZXMgPT0gMCk7Ci0KLQlpZiAoc3RyY21wKGNwdUNsb2NrLCAiNTAwIikgPT0gMCkKLQkJc3RyY3B5KHBsYkNsb2NrLCAiMTY2Iik7Ci0JZWxzZSBpZiAoc3RyY21wKGNwdUNsb2NrLCAiNTMzIikgPT0gMCkKLQkJc3RyY3B5KHBsYkNsb2NrLCAiMTMzIik7Ci0JZWxzZSB7Ci0JCWRvIHsKLQkJCWlmIChzdHJjbXAoY3B1Q2xvY2ssICI0MDAiKSA9PSAwKQotCQkJCXByaW50ZigiZW50ZXIgcGxiIGNsb2NrIGZyZXF1ZW5jeSAxMDAsIDEzMyBNSHogb3IgcXVpdCB0byBhYm9ydFxuIik7Ci0KLSNpZmRlZglDT05GSUdfU1RSRVNTCi0JCQlpZiAoc3RyY21wKGNwdUNsb2NrLCAiNjY3IikgPT0gMCkKLQkJCQlwcmludGYoImVudGVyIHBsYiBjbG9jayBmcmVxdWVuY3kgMTMzLCAxNjYgTUh6IG9yIHF1aXQgdG8gYWJvcnRcbiIpOwotCi0jZW5kaWYKLQkJCW5ieXRlcyA9IHJlYWRsaW5lICgiID8gIik7Ci0KLQkJCWlmIChzdHJjbXAoY29uc29sZV9idWZmZXIsICJxdWl0IikgPT0gMCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKHN0cmNtcChjcHVDbG9jaywgIjQwMCIpID09IDApIHsKLQkJCQlpZiAoKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjEwMCIpICE9IDApICYmCi0JCQkJICAgIChzdHJjbXAoY29uc29sZV9idWZmZXIsICIxMzMiKSAhPSAwKSkKLQkJCQkJbmJ5dGVzID0gMDsKLQkJCX0KLSNpZmRlZglDT05GSUdfU1RSRVNTCi0JCQlpZiAoc3RyY21wKGNwdUNsb2NrLCAiNjY3IikgPT0gMCkgewotCQkJCWlmICgoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAiMTMzIikgIT0gMCkgJiYKLQkJCQkgICAgKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjE2NiIpICE9IDApKQotCQkJCQluYnl0ZXMgPSAwOwotCQkJfQotI2VuZGlmCi0JCQlzdHJjcHkocGxiQ2xvY2ssIGNvbnNvbGVfYnVmZmVyKTsKLQotCQl9IHdoaWxlIChuYnl0ZXMgPT0gMCk7Ci0JfQotCi0JZG8gewotCQlwcmludGYoImVudGVyIFBjaS1YIGNsb2NrIGZyZXF1ZW5jeSAzMywgNjYsIDEwMCBvciAxMzMgTUh6IG9yIHF1aXQgdG8gYWJvcnRcbiIpOwotCQluYnl0ZXMgPSByZWFkbGluZSAoIiA/ICIpOwotCi0JCWlmIChzdHJjbXAoY29uc29sZV9idWZmZXIsICJxdWl0IikgPT0gMCkKLQkJCXJldHVybiAwOwotCi0JCWlmICgoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAiMzMiKSAhPSAwKSAmJgotCQkgICAgKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjY2IikgIT0gMCkgJiYKLQkJICAgIChzdHJjbXAoY29uc29sZV9idWZmZXIsICIxMDAiKSAhPSAwKSAmJgotCQkgICAgKHN0cmNtcChjb25zb2xlX2J1ZmZlciwgIjEzMyIpICE9IDApKSB7Ci0JCQluYnl0ZXMgPSAwOwotCQl9Ci0JCXN0cmNweShwY2l4Q2xvY2ssIGNvbnNvbGVfYnVmZmVyKTsKLQotCX0gd2hpbGUgKG5ieXRlcyA9PSAwKTsKLQotCXByaW50ZigiXG5zeXMgY2xrICAgPSAlcyBNSHpcbiIsIHN5c0Nsb2NrKTsKLQlwcmludGYoImNwdSBjbGsgICA9ICVzIE1IelxuIiwgY3B1Q2xvY2spOwotCXByaW50ZigicGxiIGNsayAgID0gJXMgTUh6XG4iLCBwbGJDbG9jayk7Ci0JcHJpbnRmKCJQY2ktWCBjbGsgPSAlcyBNSHpcbiIsIHBjaXhDbG9jayk7Ci0KLQlkbyB7Ci0JCXByaW50ZigiXG5wcmVzcyBbeV0gdG8gd3JpdGUgSTJDIGJvb3RzdHJhcCBcbiIpOwotCQlwcmludGYoIm9yIFtuXSB0byBhYm9ydC4gIFxuIik7Ci0JCXByaW50ZigiRG9uJ3QgZm9yZ2V0IHRvIHNldCBib2FyZCBzd2l0Y2hlcyBcbiIpOwotCQlwcmludGYoImFjY29yZGluZyB0byB5b3VyIGNob2ljZSBiZWZvcmUgcmUtc3RhcnRpbmcgXG4iKTsKLQkJcHJpbnRmKCIocmVmZXIgdG8gNDQwc3BlX3Vib290X2tpdF91bV8xXzAxLnBkZikgXG4iKTsKLQotCQluYnl0ZXMgPSByZWFkbGluZSAoIiA/ICIpOwotCQlpZiAoc3RyY21wKGNvbnNvbGVfYnVmZmVyLCAibiIpID09IDApCi0JCQlyZXR1cm4gMDsKLQotCX0gd2hpbGUgKG5ieXRlcyA9PSAwKTsKLQotCWlmIChzdHJjbXAoc3lzQ2xvY2ssICIzMyIpID09IDApIHsKLQkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI0MDAiKSA9PSAwKSAmJgotCQkgICAgKHN0cmNtcChwbGJDbG9jaywgIjEwMCIpID09IDApKQotCQkJZGF0YSA9IDB4ODY3OGMyMDY7Ci0KLQkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI0MDAiKSA9PSAwKSAmJgotCQkgICAgKHN0cmNtcChwbGJDbG9jaywgIjEzMyIpID09IDApKQotCQkJZGF0YSA9IDB4ODY3OGMyYzY7Ci0KLQkJaWYgKChzdHJjbXAoY3B1Q2xvY2ssICI1MDAiKSA9PSAwKSkKLQkJCWRhdGEgPSAweDg3NzhmMmM2OwotCi0JCWlmICgoc3RyY21wKGNwdUNsb2NrLCAiNTMzIikgPT0gMCkpCi0JCQlkYXRhID0gMHg4Nzc5MDI1MjsKLSNpZmRlZglDT05GSUdfU1RSRVNTCi0JCWlmICgoc3RyY21wKGNwdUNsb2NrLCAiNjY3IikgPT0gMCkgJiYKLQkJICAgIChzdHJjbXAocGxiQ2xvY2ssICIxMzMiKSA9PSAwKSkKLQkJCWRhdGEgPSAweDg3Nzk0MjU2OwotCi0JCWlmICgoc3RyY21wKGNwdUNsb2NrLCAiNjY3IikgPT0gMCkgJiYKLQkJICAgIChzdHJjbXAocGxiQ2xvY2ssICIxNjYiKSA9PSAwKSkKLQkJCWRhdGEgPSAweDg3Nzk0MjA2OwotI2VuZGlmCi0JfQotI2lmZGVmCURFQlVHCi0JcHJpbnRmKCIgcGluIHN0cmFwMCB0byB3cml0ZSBpbiBpMmMgID0gJWx4XG4iLCBkYXRhKTsKLSNlbmRpZgkvKiBERUJVRyAqLwotCi0JaWYgKGkyY193cml0ZShjaGlwLCAwLCAxLCAodWNoYXIgKikmZGF0YSwgNCkgIT0gMCkKLQkJcHJpbnRmKCJFcnJvciB3cml0aW5nIHN0cmFwMCBpbiAlc1xuIiwgYXJndlsyXSk7Ci0KLQlpZiAoc3RyY21wKHBjaXhDbG9jaywgIjMzIikgPT0gMCkKLQkJZGF0YSA9IDB4MDAwMDA3RTE7Ci0KLQlpZiAoc3RyY21wKHBjaXhDbG9jaywgIjY2IikgPT0gMCkKLQkJZGF0YSA9IDB4MDAwMDA2RTE7Ci0KLQlpZiAoc3RyY21wKHBjaXhDbG9jaywgIjEwMCIpID09IDApCi0JCWRhdGEgPSAweDAwMDAwNUUxOwotCi0JaWYgKHN0cmNtcChwY2l4Q2xvY2ssICIxMzMiKSA9PSAwKQotCQlkYXRhID0gMHgwMDAwMDRFMTsKLQotCWlmIChzdHJjbXAocGxiQ2xvY2ssICIxNjYiKSA9PSAwKQotLyoJCWRhdGEgfD0gMHgwNTk1MDAwMDsgKi8JLyogdGhpcyBzZXQncyBERFIyIGNsb2NrID09IFBMQiBjbG9jayAqLwotCQlkYXRhIHw9IDB4MDVBNTAwMDA7CS8qIHRoaXMgc2V0J3MgRERSMiBjbG9jayA9PSAyICogUExCIGNsb2NrICovCi0JZWxzZQotCQlkYXRhIHw9IDB4MDVBNTAwMDA7Ci0KLSNpZmRlZglERUJVRwotCXByaW50ZigiIHBpbiBzdHJhcDEgdG8gd3JpdGUgaW4gaTJjICA9ICVseFxuIiwgZGF0YSk7Ci0jZW5kaWYJLyogREVCVUcgKi8KLQotCXVkZWxheSgxMDAwKTsKLQlpZiAoaTJjX3dyaXRlKGNoaXAsIDQsIDEsICh1Y2hhciAqKSZkYXRhLCA0KSAhPSAwKQotCQlwcmludGYoIkVycm9yIHdyaXRpbmcgc3RyYXAxIGluICVzXG4iLCBhcmd2WzJdKTsKLQotCXJldHVybiAwOwotfQotCi1VX0JPT1RfQ01EKAotCWJvb3RzdHJhcCwJMywJMSwJZG9fYm9vdHN0cmFwLAotCSJwcm9ncmFtIHRoZSBzZXJpYWwgZGV2aWNlIHN0cmFwIiwKLQkid3JjbGsgW3Byb20wfHByb20xXSAtIHByb2dyYW0gdGhlIHNlcmlhbCBkZXZpY2Ugc3RyYXAiCi0pOwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9rYXRtYWkva2F0bWFpLmMgYi9ib2FyZC9hbWNjL2thdG1haS9rYXRtYWkuYwppbmRleCA5MDhmMWE1Li41NGUyYTM5IDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL2thdG1haS9rYXRtYWkuYworKysgYi9ib2FyZC9hbWNjL2thdG1haS9rYXRtYWkuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDctMjAwOAorICogKEMpIENvcHlyaWdodCAyMDA3LTIwMDkKICAqIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KICAqCiAgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwpAQCAtMjYwLDk4ICsyNjAsOCBAQAogCXJldHVybiAoU0RSQU1fQ0xLVFJfQ0xLUF85MF9ERUdfQURWKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfcHJlX2luaXQKLSAqCi0gKiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHJlZ2lzdGVyaW5nIHRoZSBob3NlIGFuZCBnaXZlcwotICogIHRoZSBib2FyZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hlY2sgdGhpbmdzLiBSZXR1cm5pbmcgYSB2YWx1ZSBvZiB6ZXJvCi0gKiAgaW5kaWNhdGVzIHRoYXQgdGhpbmdzIGFyZSBiYWQgJiBQQ0kgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGFib3J0ZWQuCi0gKgotICoJRGlmZmVyZW50IGJvYXJkcyBtYXkgd2lzaCB0byBjdXN0b21pemUgdGhlIHBjaSBjb250cm9sbGVyIHN0cnVjdHVyZQotICoJKGFkZCByZWdpb25zLCBvdmVycmlkZSBkZWZhdWx0IGFjY2VzcyByb3V0aW5lcywgZXRjKSBvciBwZXJmb3JtCi0gKgljZXJ0YWluIHByZS1pbml0aWFsaXphdGlvbiBhY3Rpb25zLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IHBjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBob3NlICkKLXsKLQl1bnNpZ25lZCBsb25nIHN0cmFwOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqCVRoZSBrYXRtYWkgYm9hcmQgaXMgYWx3YXlzIGNvbmZpZ3VyZWQgYXMgdGhlIGhvc3QgJiByZXF1aXJlcyB0aGUKLQkgKglQQ0kgYXJiaXRlciB0byBiZSBlbmFibGVkLgotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbWZzZHIoU0RSMF9TRFNUUDEsIHN0cmFwKTsKLQlpZiggKHN0cmFwICYgU0RSMF9TRFNUUDFfUEFFX01BU0spID09IDAgKSB7Ci0JCXByaW50ZigiUENJOiBTRFIwX1NUUlAxWyUwOGxYXSAtIFBDSSBBcmJpdGVyIGRpc2FibGVkLlxuIixzdHJhcCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfdGFyZ2V0X2luaXQKLSAqCi0gKglUaGUgYm9vdHN0cmFwIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBjaQotICoJaW5ib3VuZCBtYXAgKFBJTSkuIEJ1dCB0aGUgYm9vdHN0cmFwIGNvbmZpZyBjaG9pY2VzIGFyZSBsaW1pdGVkIGFuZAotICoJbWF5IG5vdCBiZSBzdWZmaWNpZW50IGZvciBhIGdpdmVuIGJvYXJkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKQotdm9pZCBwY2lfdGFyZ2V0X2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSApCi17Ci0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIERpc2FibGUgZXZlcnl0aGluZwotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MzJyKCBQQ0lMMF9QSU0wU0EsIDAgKTsgLyogZGlzYWJsZSAqLwotCW91dDMyciggUENJTDBfUElNMVNBLCAwICk7IC8qIGRpc2FibGUgKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTJTQSwgMCApOyAvKiBkaXNhYmxlICovCi0Jb3V0MzJyKCBQQ0lMMF9FUk9NQkEsIDAgKTsgLyogZGlzYWJsZSBleHBhbnNpb24gcm9tICovCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogTWFwIGFsbCBvZiBTRFJBTSB0byBQQ0kgYWRkcmVzcyAweDAwMDBfMDAwMC4gTm90ZSB0aGF0IHRoZSA0NDAKLQkgKiBzdHJhcHBpbmcgb3B0aW9ucyB0byBub3Qgc3VwcG9ydCBzaXplcyBzdWNoIGFzIDEyOC8yNTYgTUIuCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTBMQUwsIENPTkZJR19TWVNfU0RSQU1fQkFTRSApOwotCW91dDMyciggUENJTDBfUElNMExBSCwgMCApOwotCW91dDMyciggUENJTDBfUElNMFNBLCB+KGdkLT5yYW1fc2l6ZSAtIDEpIHwgMSApOwotCW91dDMyciggUENJTDBfQkFSMCwgMCApOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZAotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MTZyKCBQQ0lMMF9TQlNZU1ZJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEICk7Ci0Jb3V0MTZyKCBQQ0lMMF9TQlNZU0lELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfREVWSUNFSUQgKTsKLQotCW91dDE2ciggUENJTDBfQ01ELCBpbjE2cihQQ0lMMF9DTUQpIHwgUENJX0NPTU1BTkRfTUVNT1JZICk7Ci19Ci0jZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKSAqLwotCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBpc19wY2lfaG9zdAotICoKLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCi0gKglwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKLSAqCVBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCi0gKgliaXQgaW4gdGhlIHN0cmFwIHJlZ2lzdGVyLCBvciBnZW5lcmljIGhvc3QvYWRhcHRlciBhc3N1bXB0aW9ucy4KLSAqCi0gKglSYXRoZXIgdGhhbiBoYXJkLWNvZGUgYSBiYWQgYXNzdW1wdGlvbiBpbiB0aGUgZ2VuZXJhbCA0NDAgY29kZSwgdGhlCi0gKgk0NDAgcGNpIGNvZGUgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGRlY2lkZSBhdCBydW50aW1lLgotICoKLSAqCVJldHVybiAwIGZvciBhZGFwdGVyIG1vZGUsIG5vbi16ZXJvIGZvciBob3N0IChtb25hcmNoKSBtb2RlLgotICoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGlzX3BjaV9ob3N0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQkvKiBUaGUga2F0bWFpIGJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQga2F0bWFpX3BjaWVfY2FyZF9wcmVzZW50KGludCBwb3J0KQoraW50IGJvYXJkX3BjaWVfY2FyZF9wcmVzZW50KGludCBwb3J0KQogewogCXUzMiB2YWw7CiAKQEAgLTM2Nyw5MSArMjc3LDggQEAKIAkJcmV0dXJuIDA7CiAJfQogfQotCi1zdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIHBjaWVfaG9zZVszXSA9IHt7MH0sezB9LHswfX07Ci0KLXZvaWQgcGNpZV9zZXR1cF9ob3NlcyhpbnQgYnVzbm8pCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCWludCBpLCBidXM7Ci0JaW50IHJldCA9IDA7Ci0JY2hhciAqZW52OwotCXVuc2lnbmVkIGludCBkZWxheTsKLQotCS8qCi0JICogYXNzdW1lIHdlJ3JlIGNhbGxlZCBhZnRlciB0aGUgUENJWCBob3NlIGlzIGluaXRpYWxpemVkLCB3aGljaCB0YWtlcwotCSAqIGJ1cyBJRCAwIGFuZCB0aGVyZWZvcmUgc3RhcnQgbnVtYmVyaW5nIFBDSWUncyBmcm9tIDEuCi0JICovCi0JYnVzID0gYnVzbm87Ci0JZm9yIChpID0gMDsgaSA8PSAyOyBpKyspIHsKLQkJLyogQ2hlY2sgZm9yIGthdG1haSBjYXJkIHByZXNlbmNlICovCi0JCWlmICgha2F0bWFpX3BjaWVfY2FyZF9wcmVzZW50KGkpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGlzX2VuZF9wb2ludChpKSkKLQkJCXJldCA9IHBwYzR4eF9pbml0X3BjaWVfZW5kcG9ydChpKTsKLQkJZWxzZQotCQkJcmV0ID0gcHBjNHh4X2luaXRfcGNpZV9yb290cG9ydChpKTsKLQkJaWYgKHJldCA9PSAtRU5PREVWKQotCQkJY29udGludWU7Ci0JCWlmIChyZXQpIHsKLQkJCXByaW50ZigiUENJRSVkOiBpbml0aWFsaXphdGlvbiBhcyAlcyBmYWlsZWRcbiIsIGksCi0JCQkgICAgICAgaXNfZW5kX3BvaW50KGkpID8gImVuZHBvaW50IiA6ICJyb290LWNvbXBsZXgiKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaG9zZSA9ICZwY2llX2hvc2VbaV07Ci0JCWhvc2UtPmZpcnN0X2J1c25vID0gYnVzOwotCQlob3NlLT5sYXN0X2J1c25vID0gYnVzOwotCQlob3NlLT5jdXJyZW50X2J1c25vID0gYnVzOwotCi0JCS8qIHNldHVwIG1lbSByZXNvdXJjZSAqLwotCQlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMCwKLQkJCSAgICAgICBDT05GSUdfU1lTX1BDSUVfTUVNQkFTRSArIGkgKiBDT05GSUdfU1lTX1BDSUVfTUVNU0laRSwKLQkJCSAgICAgICBDT05GSUdfU1lTX1BDSUVfTUVNQkFTRSArIGkgKiBDT05GSUdfU1lTX1BDSUVfTUVNU0laRSwKLQkJCSAgICAgICBDT05GSUdfU1lTX1BDSUVfTUVNU0laRSwKLQkJCSAgICAgICBQQ0lfUkVHSU9OX01FTSk7Ci0JCWhvc2UtPnJlZ2lvbl9jb3VudCA9IDE7Ci0JCXBjaV9yZWdpc3Rlcl9ob3NlKGhvc2UpOwotCi0JCWlmIChpc19lbmRfcG9pbnQoaSkpIHsKLQkJCXBwYzR4eF9zZXR1cF9wY2llX2VuZHBvaW50KGhvc2UsIGkpOwotCQkJLyoKLQkJCSAqIFJlc29uIGZvciBubyBzY2FubmluZyBpcyBlbmRwb2ludCBjYW4gbm90IGdlbmVyYXRlCi0JCQkgKiB1cHN0cmVhbSBjb25maWd1cmF0aW9uIGFjY2Vzc2VzLgotCQkJICovCi0JCX0gZWxzZSB7Ci0JCQlwcGM0eHhfc2V0dXBfcGNpZV9yb290cG9pbnQoaG9zZSwgaSk7Ci0JCQllbnYgPSBnZXRlbnYgKCJwY2lzY2FuZGVsYXkiKTsKLQkJCWlmIChlbnYgIT0gTlVMTCkgewotCQkJCWRlbGF5ID0gc2ltcGxlX3N0cnRvdWwoZW52LCBOVUxMLCAxMCk7Ci0JCQkJaWYgKGRlbGF5ID4gNSkKLQkJCQkJcHJpbnRmKCJXYXJuaW5nLCBleHBlY3Qgbm90aWNhYmxlIGRlbGF5IGJlZm9yZSAiCi0JCQkJCSAgICAgICAiUENJZSBzY2FuIGR1ZSB0byAncGNpc2NhbmRlbGF5JyB2YWx1ZSFcbiIpOwotCQkJCW1kZWxheShkZWxheSAqIDEwMDApOwotCQkJfQotCi0JCQkvKgotCQkJICogQ29uZmlnIGFjY2VzcyBjYW4gb25seSBnbyBkb3duIHN0cmVhbQotCQkJICovCi0JCQlob3NlLT5sYXN0X2J1c25vID0gcGNpX2hvc2Vfc2Nhbihob3NlKTsKLQkJCWJ1cyA9IGhvc2UtPmxhc3RfYnVzbm8gKyAxOwotCQl9Ci0JfQotfQogI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KIAotI2lmZGVmIENPTkZJR19QT1NUCi0vKgotICogUmV0dXJucyAxIGlmIGtleXMgcHJlc3NlZCB0byBzdGFydCB0aGUgcG93ZXItb24gbG9uZy1ydW5uaW5nIHRlc3RzCi0gKiBDYWxsZWQgZnJvbSBib2FyZF9pbml0X2YoKS4KLSAqLwotaW50IHBvc3RfaG90a2V5c19wcmVzc2VkKHZvaWQpCi17Ci0JcmV0dXJuIChjdHJsYygpKTsKLX0KLSNlbmRpZgotCiBpbnQgYm9hcmRfZXRoX2luaXQoYmRfdCAqYmlzKQogewogCWNwdV9ldGhfaW5pdChiaXMpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9rYXRtYWkvdS1ib290LmxkcyBiL2JvYXJkL2FtY2Mva2F0bWFpL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMjMxYzIuLjAwMDAwMDAKLS0tIGEvYm9hcmQvYW1jYy9rYXRtYWkvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDA0Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JCSgudGV4dCkKLSAgICBib2FyZC9hbWNjL2thdG1haS9pbml0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mva2lsYXVlYS9jb25maWcubWsgYi9ib2FyZC9hbWNjL2tpbGF1ZWEvY29uZmlnLm1rCmluZGV4IGY1ODAwZWIuLmIzZDNmMjIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2Mva2lsYXVlYS9jb25maWcubWsKKysrIGIvYm9hcmQvYW1jYy9raWxhdWVhL2NvbmZpZy5tawpAQCAtMzAsMyArMzAsNyBAQAogaWZlcSAoJChkZWJ1ZyksMSkKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1EREVCVUcKIGVuZGlmCisKK2lmZGVmIENPTkZJR19OQU5EX1VfQk9PVAorTERTQ1JJUFQgOj0gJChUT1BESVIpL2JvYXJkLyQoQk9BUkRESVIpL3UtYm9vdC1uYW5kLmxkcworZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mva2lsYXVlYS9raWxhdWVhLmMgYi9ib2FyZC9hbWNjL2tpbGF1ZWEva2lsYXVlYS5jCmluZGV4IDVjZDgyMmEuLjhjZTI0NDUgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2Mva2lsYXVlYS9raWxhdWVhLmMKKysrIGIvYm9hcmQvYW1jYy9raWxhdWVhL2tpbGF1ZWEuYwpAQCAtMjUyLDE1ICsyNTIsMTkgQEAKIAkJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBpbnQgYm9hcmRfcGNpZV9jb3VudCh2b2lkKQorLyoKKyAqIE92ZXJyaWRlIHRoZSB3ZWFrIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYW5kIHJldHVybiB0aGUKKyAqIGxhc3QgUENJZSBzbG90IG51bWJlciAobWF4IG51bWJlciAtIDEpLgorICovCitpbnQgYm9hcmRfcGNpZV9sYXN0KHZvaWQpCiB7CiAJLyoKIAkgKiA0MDVFWHIgb25seSBoYXMgb25lIEVNQUMgaW50ZXJmYWNlLCA0MDVFWCBoYXMgdHdvCiAJICovCiAJaWYgKGlzXzQwNWV4cigpKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDEgLSAxOwogCWVsc2UKLQkJcmV0dXJuIDI7CisJCXJldHVybiAyIC0gMTsKIH0KIAogaW50IGNoZWNrYm9hcmQgKHZvaWQpCkBAIC0yODAsMTAwICsyODQsMyBAQAogCiAJcmV0dXJuICgwKTsKIH0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfcHJlX2luaXQKLSAqCi0gKiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHJlZ2lzdGVyaW5nIHRoZSBob3NlIGFuZCBnaXZlcwotICogIHRoZSBib2FyZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hlY2sgdGhpbmdzLiBSZXR1cm5pbmcgYSB2YWx1ZSBvZiB6ZXJvCi0gKiAgaW5kaWNhdGVzIHRoYXQgdGhpbmdzIGFyZSBiYWQgJiBQQ0kgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGFib3J0ZWQuCi0gKgotICogICAgICBEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCi0gKiAgICAgIChhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQotICogICAgICBjZXJ0YWluIHByZS1pbml0aWFsaXphdGlvbiBhY3Rpb25zLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IHBjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBob3NlICkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCi0jaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBwY2llX2hvc2VbMl0gPSB7ezB9LHswfX07Ci0KLXZvaWQgcGNpZV9zZXR1cF9ob3NlcyhpbnQgYnVzbm8pCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCWludCBpLCBidXM7Ci0JaW50IHJldCA9IDA7Ci0JYnVzID0gYnVzbm87Ci0JY2hhciAqZW52OwotCXVuc2lnbmVkIGludCBkZWxheTsKLQotCWZvciAoaSA9IDA7IGkgPCBib2FyZF9wY2llX2NvdW50KCk7IGkrKykgewotCi0JCWlmIChpc19lbmRfcG9pbnQoaSkpCi0JCQlyZXQgPSBwcGM0eHhfaW5pdF9wY2llX2VuZHBvcnQoaSk7Ci0JCWVsc2UKLQkJCXJldCA9IHBwYzR4eF9pbml0X3BjaWVfcm9vdHBvcnQoaSk7Ci0JCWlmIChyZXQgPT0gLUVOT0RFVikKLQkJCWNvbnRpbnVlOwotCQlpZiAocmV0KSB7Ci0JCQlwcmludGYoIlBDSUUlZDogaW5pdGlhbGl6YXRpb24gYXMgJXMgZmFpbGVkXG4iLCBpLAotCQkJICAgICAgIGlzX2VuZF9wb2ludChpKSA/ICJlbmRwb2ludCIgOiAicm9vdC1jb21wbGV4Iik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWhvc2UgPSAmcGNpZV9ob3NlW2ldOwotCQlob3NlLT5maXJzdF9idXNubyA9IGJ1czsKLQkJaG9zZS0+bGFzdF9idXNubyA9IGJ1czsKLQkJaG9zZS0+Y3VycmVudF9idXNubyA9IGJ1czsKLQotCQkvKiBzZXR1cCBtZW0gcmVzb3VyY2UgKi8KLQkJcGNpX3NldF9yZWdpb24oaG9zZS0+cmVnaW9ucyArIDAsCi0JCQkgICAgICAgQ09ORklHX1NZU19QQ0lFX01FTUJBU0UgKyBpICogQ09ORklHX1NZU19QQ0lFX01FTVNJWkUsCi0JCQkgICAgICAgQ09ORklHX1NZU19QQ0lFX01FTUJBU0UgKyBpICogQ09ORklHX1NZU19QQ0lFX01FTVNJWkUsCi0JCQkgICAgICAgQ09ORklHX1NZU19QQ0lFX01FTVNJWkUsCi0JCQkgICAgICAgUENJX1JFR0lPTl9NRU0pOwotCQlob3NlLT5yZWdpb25fY291bnQgPSAxOwotCQlwY2lfcmVnaXN0ZXJfaG9zZShob3NlKTsKLQotCQlpZiAoaXNfZW5kX3BvaW50KGkpKSB7Ci0JCQlwcGM0eHhfc2V0dXBfcGNpZV9lbmRwb2ludChob3NlLCBpKTsKLQkJCS8qCi0JCQkgKiBSZXNvbiBmb3Igbm8gc2Nhbm5pbmcgaXMgZW5kcG9pbnQgY2FuIG5vdCBnZW5lcmF0ZQotCQkJICogdXBzdHJlYW0gY29uZmlndXJhdGlvbiBhY2Nlc3Nlcy4KLQkJCSAqLwotCQl9IGVsc2UgewotCQkJcHBjNHh4X3NldHVwX3BjaWVfcm9vdHBvaW50KGhvc2UsIGkpOwotCQkJZW52ID0gZ2V0ZW52ICgicGNpc2NhbmRlbGF5Iik7Ci0JCQlpZiAoZW52ICE9IE5VTEwpIHsKLQkJCQlkZWxheSA9IHNpbXBsZV9zdHJ0b3VsKGVudiwgTlVMTCwgMTApOwotCQkJCWlmIChkZWxheSA+IDUpCi0JCQkJCXByaW50ZigiV2FybmluZywgZXhwZWN0IG5vdGljYWJsZSBkZWxheSBiZWZvcmUgIgotCQkJCQkgICAgICAgIlBDSWUgc2NhbiBkdWUgdG8gJ3BjaXNjYW5kZWxheScgdmFsdWUhXG4iKTsKLQkJCQltZGVsYXkoZGVsYXkgKiAxMDAwKTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIENvbmZpZyBhY2Nlc3MgY2FuIG9ubHkgZ28gZG93biBzdHJlYW0KLQkJCSAqLwotCQkJaG9zZS0+bGFzdF9idXNubyA9IHBjaV9ob3NlX3NjYW4oaG9zZSk7Ci0JCQlidXMgPSBob3NlLT5sYXN0X2J1c25vICsgMTsKLQkJfQotCX0KLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfUE9TVCkKLS8qCi0gKiBSZXR1cm5zIDEgaWYga2V5cyBwcmVzc2VkIHRvIHN0YXJ0IHRoZSBwb3dlci1vbiBsb25nLXJ1bm5pbmcgdGVzdHMKLSAqIENhbGxlZCBmcm9tIGJvYXJkX2luaXRfZigpLgotICovCi1pbnQgcG9zdF9ob3RrZXlzX3ByZXNzZWQodm9pZCkKLXsKLQlyZXR1cm4gMDsJLyogTm8gaG90a2V5cyBzdXBwb3J0ZWQgKi8KLX0KLSNlbmRpZiAvKiBDT05GSUdfUE9TVCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9raWxhdWVhL3UtYm9vdC5sZHMgYi9ib2FyZC9hbWNjL2tpbGF1ZWEvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmViYjJiMi4uMDAwMDAwMAotLS0gYS9ib2FyZC9hbWNjL2tpbGF1ZWEvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0vKiBUbyBjb21waWxlIHN1Y2Nlc3NmdWxseSwgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4KLSAqIFRvIGdvIGluIHJhbSwgcmVtb3ZlIHRoZSBzZWN0aW9uLgotICogQWRkZWQgYnkgU3VuSGUuCi0gKi8KLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvbHVhbi9sdWFuLmMgYi9ib2FyZC9hbWNjL2x1YW4vbHVhbi5jCmluZGV4IGEwNGYyYWYuLjMzMmQxNzAgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvbHVhbi9sdWFuLmMKKysrIGIvYm9hcmQvYW1jYy9sdWFuL2x1YW4uYwpAQCAtMTI3LDEwMiArMTI3LDYgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfcHJlX2luaXQKLSAqCi0gKiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHJlZ2lzdGVyaW5nIHRoZSBob3NlIGFuZCBnaXZlcwotICogIHRoZSBib2FyZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hlY2sgdGhpbmdzLiBSZXR1cm5pbmcgYSB2YWx1ZSBvZiB6ZXJvCi0gKiAgaW5kaWNhdGVzIHRoYXQgdGhpbmdzIGFyZSBiYWQgJiBQQ0kgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGFib3J0ZWQuCi0gKgotICoJRGlmZmVyZW50IGJvYXJkcyBtYXkgd2lzaCB0byBjdXN0b21pemUgdGhlIHBjaSBjb250cm9sbGVyIHN0cnVjdHVyZQotICoJKGFkZCByZWdpb25zLCBvdmVycmlkZSBkZWZhdWx0IGFjY2VzcyByb3V0aW5lcywgZXRjKSBvciBwZXJmb3JtCi0gKgljZXJ0YWluIHByZS1pbml0aWFsaXphdGlvbiBhY3Rpb25zLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IHBjaV9wcmVfaW5pdCggc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlICkKLXsKLQl1bnNpZ25lZCBsb25nIHN0cmFwOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKglUaGUgbHVhbiBib2FyZCBpcyBhbHdheXMgY29uZmlndXJlZCBhcyB0aGUgaG9zdCAmIHJlcXVpcmVzIHRoZQotCSAqCVBDSSBhcmJpdGVyIHRvIGJlIGVuYWJsZWQuCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbWZzZHIoU0RSMF9TRFNUUDEsIHN0cmFwKTsKLQlpZiggKHN0cmFwICYgU0RSMF9TRFNUUDFfUEFFX01BU0spID09IDAgKSB7Ci0JCXByaW50ZigiUENJOiBTRFIwX1NUUlAxWyUwOGxYXSAtIFBDSSBBcmJpdGVyIGRpc2FibGVkLlxuIixzdHJhcCk7Ci0KLQkJcmV0dXJuICAwOwotCX0KLQotCXJldHVybiAgMTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfdGFyZ2V0X2luaXQKLSAqCi0gKglUaGUgYm9vdHN0cmFwIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBjaQotICoJaW5ib3VuZCBtYXAgKFBJTSkuIEJ1dCB0aGUgYm9vdHN0cmFwIGNvbmZpZyBjaG9pY2VzIGFyZSBsaW1pdGVkIGFuZAotICoJbWF5IG5vdCBiZSBzdWZmaWNpZW50IGZvciBhIGdpdmVuIGJvYXJkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKQotdm9pZCBwY2lfdGFyZ2V0X2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogRGlzYWJsZSBldmVyeXRoaW5nCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MzJyKCBQQ0lMMF9QSU0wU0EsIDAgKTsgLyogZGlzYWJsZSAqLwotCW91dDMyciggUENJTDBfUElNMVNBLCAwICk7IC8qIGRpc2FibGUgKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTJTQSwgMCApOyAvKiBkaXNhYmxlICovCi0Jb3V0MzJyKCBQQ0lMMF9FUk9NQkEsIDAgKTsgLyogZGlzYWJsZSBleHBhbnNpb24gcm9tICovCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIE1hcCBhbGwgb2YgU0RSQU0gdG8gUENJIGFkZHJlc3MgMHgwMDAwXzAwMDAuIE5vdGUgdGhhdCB0aGUgNDQwIHN0cmFwcGluZwotCSAqIG9wdGlvbnMgdG8gbm90IHN1cHBvcnQgc2l6ZXMgc3VjaCBhcyAxMjgvMjU2IE1CLgotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDMyciggUENJTDBfUElNMExBTCwgQ09ORklHX1NZU19TRFJBTV9CQVNFICk7Ci0Jb3V0MzJyKCBQQ0lMMF9QSU0wTEFILCAwICk7Ci0Jb3V0MzJyKCBQQ0lMMF9QSU0wU0EsIH4oZ2QtPnJhbV9zaXplIC0gMSkgfCAxICk7Ci0KLQlvdXQzMnIoIFBDSUwwX0JBUjAsIDAgKTsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogUHJvZ3JhbSB0aGUgYm9hcmQncyBzdWJzeXN0ZW0gaWQvdmVuZG9yIGlkCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MTZyKCBQQ0lMMF9TQlNZU1ZJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEICk7Ci0Jb3V0MTZyKCBQQ0lMMF9TQlNZU0lELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfREVWSUNFSUQgKTsKLQotCW91dDE2ciggUENJTDBfQ01ELCBpbjE2cihQQ0lMMF9DTUQpIHwgUENJX0NPTU1BTkRfTUVNT1JZICk7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKSAqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgaXNfcGNpX2hvc3QKLSAqCi0gKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHBjaSBzY2FuIHNob3VsZCBiZQotICoJcGVyZm9ybWVkLiBXaXRoIHZhcmlvdXMgaGFyZHdhcmUgZW52aXJvbm1lbnRzIChlc3BlY2lhbGx5IGNQQ0kgYW5kCi0gKglQUE1DKSBpdCdzIGluc3VmZmljaWVudCB0byBkZXBlbmQgb24gdGhlIHN0YXRlIG9mIHRoZSBhcmJpdGVyIGVuYWJsZQotICoJYml0IGluIHRoZSBzdHJhcCByZWdpc3Rlciwgb3IgZ2VuZXJpYyBob3N0L2FkYXB0ZXIgYXNzdW1wdGlvbnMuCi0gKgotICoJUmF0aGVyIHRoYW4gaGFyZC1jb2RlIGEgYmFkIGFzc3VtcHRpb24gaW4gdGhlIGdlbmVyYWwgNDQwIGNvZGUsIHRoZQotICoJNDQwIHBjaSBjb2RlIHJlcXVpcmVzIHRoZSBib2FyZCB0byBkZWNpZGUgYXQgcnVudGltZS4KLSAqCi0gKglSZXR1cm4gMCBmb3IgYWRhcHRlciBtb2RlLCBub24temVybyBmb3IgaG9zdCAobW9uYXJjaCkgbW9kZS4KLSAqCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi1pbnQgaXNfcGNpX2hvc3Qoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXJldHVybiAgMTsKLX0KLSNlbmRpZgkJCQkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBod193YXRjaGRvZ19yZXNldAogICoKICAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzZXQgKGtlZXAgYWxpdmUpIHRoZSB3YXRjaGRvZyB0aW1lcgpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9sdWFuL3UtYm9vdC5sZHMgYi9ib2FyZC9hbWNjL2x1YW4vdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjNWI2MC4uMDAwMDAwMAotLS0gYS9ib2FyZC9hbWNjL2x1YW4vdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC9hbWNjL2x1YW4vaW5pdC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL21ha2FsdS9tYWthbHUuYyBiL2JvYXJkL2FtY2MvbWFrYWx1L21ha2FsdS5jCmluZGV4IGQ0Mjc3ZGQuLjRhZmUwOTEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MvbWFrYWx1L21ha2FsdS5jCisrKyBiL2JvYXJkL2FtY2MvbWFrYWx1L21ha2FsdS5jCkBAIC0yMzYsMTAwICsyMzYsMyBAQAogCiAJcmV0dXJuICgwKTsKIH0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfcHJlX2luaXQKLSAqCi0gKiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHJlZ2lzdGVyaW5nIHRoZSBob3NlIGFuZCBnaXZlcwotICogIHRoZSBib2FyZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hlY2sgdGhpbmdzLiBSZXR1cm5pbmcgYSB2YWx1ZSBvZiB6ZXJvCi0gKiAgaW5kaWNhdGVzIHRoYXQgdGhpbmdzIGFyZSBiYWQgJiBQQ0kgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGFib3J0ZWQuCi0gKgotICogICAgICBEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCi0gKiAgICAgIChhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQotICogICAgICBjZXJ0YWluIHByZS1pbml0aWFsaXphdGlvbiBhY3Rpb25zLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IHBjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBob3NlICkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCi0jaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBwY2llX2hvc2VbMl0gPSB7ezB9LHswfX07Ci0KLXZvaWQgcGNpZV9zZXR1cF9ob3NlcyhpbnQgYnVzbm8pCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCWludCBpLCBidXM7Ci0JaW50IHJldCA9IDA7Ci0JYnVzID0gYnVzbm87Ci0JY2hhciAqZW52OwotCXVuc2lnbmVkIGludCBkZWxheTsKLQotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQotCQlpZiAoaXNfZW5kX3BvaW50KGkpKQotCQkJcmV0ID0gcHBjNHh4X2luaXRfcGNpZV9lbmRwb3J0KGkpOwotCQllbHNlCi0JCQlyZXQgPSBwcGM0eHhfaW5pdF9wY2llX3Jvb3Rwb3J0KGkpOwotCQlpZiAocmV0ID09IC1FTk9ERVYpCi0JCQljb250aW51ZTsKLQkJaWYgKHJldCkgewotCQkJcHJpbnRmKCJQQ0lFJWQ6IGluaXRpYWxpemF0aW9uIGFzICVzIGZhaWxlZFxuIiwgaSwKLQkJCSAgICAgICBpc19lbmRfcG9pbnQoaSkgPyAiZW5kcG9pbnQiIDogInJvb3QtY29tcGxleCIpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlob3NlID0gJnBjaWVfaG9zZVtpXTsKLQkJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXM7Ci0JCWhvc2UtPmxhc3RfYnVzbm8gPSBidXM7Ci0JCWhvc2UtPmN1cnJlbnRfYnVzbm8gPSBidXM7Ci0KLQkJLyogc2V0dXAgbWVtIHJlc291cmNlICovCi0JCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAwLAotCQkJICAgICAgIENPTkZJR19TWVNfUENJRV9NRU1CQVNFICsgaSAqIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAotCQkJICAgICAgIENPTkZJR19TWVNfUENJRV9NRU1CQVNFICsgaSAqIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAotCQkJICAgICAgIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAotCQkJICAgICAgIFBDSV9SRUdJT05fTUVNKTsKLQkJaG9zZS0+cmVnaW9uX2NvdW50ID0gMTsKLQkJcGNpX3JlZ2lzdGVyX2hvc2UoaG9zZSk7Ci0KLQkJaWYgKGlzX2VuZF9wb2ludChpKSkgewotCQkJcHBjNHh4X3NldHVwX3BjaWVfZW5kcG9pbnQoaG9zZSwgaSk7Ci0JCQkvKgotCQkJICogUmVzb24gZm9yIG5vIHNjYW5uaW5nIGlzIGVuZHBvaW50IGNhbiBub3QgZ2VuZXJhdGUKLQkJCSAqIHVwc3RyZWFtIGNvbmZpZ3VyYXRpb24gYWNjZXNzZXMuCi0JCQkgKi8KLQkJfSBlbHNlIHsKLQkJCXBwYzR4eF9zZXR1cF9wY2llX3Jvb3Rwb2ludChob3NlLCBpKTsKLQkJCWVudiA9IGdldGVudiAoInBjaXNjYW5kZWxheSIpOwotCQkJaWYgKGVudiAhPSBOVUxMKSB7Ci0JCQkJZGVsYXkgPSBzaW1wbGVfc3RydG91bChlbnYsIE5VTEwsIDEwKTsKLQkJCQlpZiAoZGVsYXkgPiA1KQotCQkJCQlwcmludGYoIldhcm5pbmcsIGV4cGVjdCBub3RpY2FibGUgZGVsYXkgYmVmb3JlICIKLQkJCQkJICAgICAgICJQQ0llIHNjYW4gZHVlIHRvICdwY2lzY2FuZGVsYXknIHZhbHVlIVxuIik7Ci0JCQkJbWRlbGF5KGRlbGF5ICogMTAwMCk7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBDb25maWcgYWNjZXNzIGNhbiBvbmx5IGdvIGRvd24gc3RyZWFtCi0JCQkgKi8KLQkJCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOwotCQkJYnVzID0gaG9zZS0+bGFzdF9idXNubyArIDE7Ci0JCX0KLQl9Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1BPU1QpCi0vKgotICogUmV0dXJucyAxIGlmIGtleXMgcHJlc3NlZCB0byBzdGFydCB0aGUgcG93ZXItb24gbG9uZy1ydW5uaW5nIHRlc3RzCi0gKiBDYWxsZWQgZnJvbSBib2FyZF9pbml0X2YoKS4KLSAqLwotaW50IHBvc3RfaG90a2V5c19wcmVzc2VkKHZvaWQpCi17Ci0JcmV0dXJuIDA7CS8qIE5vIGhvdGtleXMgc3VwcG9ydGVkICovCi19Ci0jZW5kaWYgLyogQ09ORklHX1BPU1QgKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvbWFrYWx1L3UtYm9vdC5sZHMgYi9ib2FyZC9hbWNjL21ha2FsdS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWJiMmIyLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2FtY2MvbWFrYWx1L3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotLyogVG8gY29tcGlsZSBzdWNjZXNzZnVsbHksIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIHNlY3Rpb24uCi0gKiBUbyBnbyBpbiByYW0sIHJlbW92ZSB0aGUgc2VjdGlvbi4KLSAqIEFkZGVkIGJ5IFN1bkhlLgotICovCi0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL29jb3RlYS9vY290ZWEuYyBiL2JvYXJkL2FtY2Mvb2NvdGVhL29jb3RlYS5jCmluZGV4IDBhYTMxN2UuLjdiZmZhM2MgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2Mvb2NvdGVhL29jb3RlYS5jCisrKyBiL2JvYXJkL2FtY2Mvb2NvdGVhL29jb3RlYS5jCkBAIC0yNzUsMTAyICsyNzUsNiBAQAogfQogI2VuZGlmCS8qICFkZWZpbmVkKENPTkZJR19TUERfRUVQUk9NKSAqLwogCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX3ByZV9pbml0Ci0gKgotICogIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKLSAqICB0aGUgYm9hcmQgdGhlIG9wcG9ydHVuaXR5IHRvIGNoZWNrIHRoaW5ncy4gUmV0dXJuaW5nIGEgdmFsdWUgb2YgemVybwotICogIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgotICoKLSAqCURpZmZlcmVudCBib2FyZHMgbWF5IHdpc2ggdG8gY3VzdG9taXplIHRoZSBwY2kgY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqCShhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQotICoJY2VydGFpbiBwcmUtaW5pdGlhbGl6YXRpb24gYWN0aW9ucy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSApCi17Ci0JdW5zaWduZWQgbG9uZyBzdHJhcDsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICoJVGhlIG9jb3RlYSBib2FyZCBpcyBhbHdheXMgY29uZmlndXJlZCBhcyB0aGUgaG9zdCAmIHJlcXVpcmVzIHRoZQotCSAqCVBDSSBhcmJpdGVyIHRvIGJlIGVuYWJsZWQuCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbWZzZHIoU0RSMF9TRFNUUDEsIHN0cmFwKTsKLQlpZiggKHN0cmFwICYgU0RSMF9TRFNUUDFfUEFFX01BU0spID09IDAgKXsKLQkJcHJpbnRmKCJQQ0k6IFNEUjBfU1RSUDFbJTA4bFhdIC0gUENJIEFyYml0ZXIgZGlzYWJsZWQuXG4iLHN0cmFwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBob3NlICkKLXsKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIERpc2FibGUgZXZlcnl0aGluZwotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDMyciggUENJTDBfUElNMFNBLCAwICk7IC8qIGRpc2FibGUgKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTFTQSwgMCApOyAvKiBkaXNhYmxlICovCi0Jb3V0MzJyKCBQQ0lMMF9QSU0yU0EsIDAgKTsgLyogZGlzYWJsZSAqLwotCW91dDMyciggUENJTDBfRVJPTUJBLCAwICk7IC8qIGRpc2FibGUgZXhwYW5zaW9uIHJvbSAqLwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiBNYXAgYWxsIG9mIFNEUkFNIHRvIFBDSSBhZGRyZXNzIDB4MDAwMF8wMDAwLiBOb3RlIHRoYXQgdGhlIDQ0MCBzdHJhcHBpbmcKLQkgKiBvcHRpb25zIHRvIG5vdCBzdXBwb3J0IHNpemVzIHN1Y2ggYXMgMTI4LzI1NiBNQi4KLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTBMQUwsIENPTkZJR19TWVNfU0RSQU1fQkFTRSApOwotCW91dDMyciggUENJTDBfUElNMExBSCwgMCApOwotCW91dDMyciggUENJTDBfUElNMFNBLCB+KGdkLT5yYW1fc2l6ZSAtIDEpIHwgMSApOwotCi0Jb3V0MzJyKCBQQ0lMMF9CQVIwLCAwICk7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZAotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDE2ciggUENJTDBfU0JTWVNWSUQsIENPTkZJR19TWVNfUENJX1NVQlNZU19WRU5ET1JJRCApOwotCW91dDE2ciggUENJTDBfU0JTWVNJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0RFVklDRUlEICk7Ci0KLQlvdXQxNnIoIFBDSUwwX0NNRCwgaW4xNnIoUENJTDBfQ01EKSB8IFBDSV9DT01NQU5EX01FTU9SWSApOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIGlzX3BjaV9ob3N0Ci0gKgotICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYSBwY2kgc2NhbiBzaG91bGQgYmUKLSAqCXBlcmZvcm1lZC4gV2l0aCB2YXJpb3VzIGhhcmR3YXJlIGVudmlyb25tZW50cyAoZXNwZWNpYWxseSBjUENJIGFuZAotICoJUFBNQykgaXQncyBpbnN1ZmZpY2llbnQgdG8gZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYXJiaXRlciBlbmFibGUKLSAqCWJpdCBpbiB0aGUgc3RyYXAgcmVnaXN0ZXIsIG9yIGdlbmVyaWMgaG9zdC9hZGFwdGVyIGFzc3VtcHRpb25zLgotICoKLSAqCVJhdGhlciB0aGFuIGhhcmQtY29kZSBhIGJhZCBhc3N1bXB0aW9uIGluIHRoZSBnZW5lcmFsIDQ0MCBjb2RlLCB0aGUKLSAqCTQ0MCBwY2kgY29kZSByZXF1aXJlcyB0aGUgYm9hcmQgdG8gZGVjaWRlIGF0IHJ1bnRpbWUuCi0gKgotICoJUmV0dXJuIDAgZm9yIGFkYXB0ZXIgbW9kZSwgbm9uLXplcm8gZm9yIGhvc3QgKG1vbmFyY2gpIG1vZGUuCi0gKgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IGlzX3BjaV9ob3N0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLSAgICAvKiBUaGUgb2NvdGVhIGJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCi0gICAgcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KLQotCiB2b2lkIGZwZ2FfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZ3JvdXA7CkBAIC00OTYsMTUgKzQwMCwzIEBACiAKIAlyZXR1cm47CiB9Ci0KLSNpZmRlZiBDT05GSUdfUE9TVAotLyoKLSAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cwotICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCi0gKi8KLWludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQotewotCi0JcmV0dXJuIChjdHJsYygpKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy9vY290ZWEvdS1ib290LmxkcyBiL2JvYXJkL2FtY2Mvb2NvdGVhL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwYjRjMDAuLjAwMDAwMDAKLS0tIGEvYm9hcmQvYW1jYy9vY290ZWEvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDA0Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC9hbWNjL29jb3RlYS9pbml0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MvcmVkd29vZC91LWJvb3QubGRzIGIvYm9hcmQvYW1jYy9yZWR3b29kL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZGEwNmUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvYW1jYy9yZWR3b29kL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7Ci0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JCSgudGV4dCkKLSAgICBib2FyZC9hbWNjL3JlZHdvb2QvaW5pdC5vCSgudGV4dCkKLQotLyogICAgLiA9IGVudl9vZmZzZXQ7Ki8KLS8qICAgIGNvbW1vbi9lbnZfZW1iZWRkZWQubygudGV4dCkqLwotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9jb25maWcubWsgYi9ib2FyZC9hbWNjL3NlcXVvaWEvY29uZmlnLm1rCmluZGV4IDZjNzQ4YzkuLmI1N2U0NzMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2Mvc2VxdW9pYS9jb25maWcubWsKKysrIGIvYm9hcmQvYW1jYy9zZXF1b2lhL2NvbmZpZy5tawpAQCAtNDMsMyArNDMsNyBAQAogaWZlcSAoJChkYmNyKSwxKQogUExBVEZPUk1fQ1BQRkxBR1MgKz0gLURDT05GSUdfU1lTX0lOSVRfREJDUj0weDhjZmYwMDAwCiBlbmRpZgorCitpZmRlZiBDT05GSUdfTkFORF9VX0JPT1QKK0xEU0NSSVBUIDo9ICQoVE9QRElSKS9ib2FyZC8kKEJPQVJERElSKS91LWJvb3QtbmFuZC5sZHMKK2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3NlcXVvaWEvc2VxdW9pYS5jIGIvYm9hcmQvYW1jYy9zZXF1b2lhL3NlcXVvaWEuYwppbmRleCAwMGY2NDA4Li42NzU2YTI3IDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3NlcXVvaWEvc2VxdW9pYS5jCisrKyBiL2JvYXJkL2FtY2Mvc2VxdW9pYS9zZXF1b2lhLmMKQEAgLTM2NCwxODMgKzM2NCwxMiBAQAogLyoKICAqIEFzc2lnbiBpbnRlcnJ1cHRzIHRvIFBDSSBkZXZpY2VzLgogICovCi12b2lkIHNlcXVvaWFfcGNpX2ZpeHVwX2lycShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHBjaV9kZXZfdCBkZXYpCit2b2lkIGJvYXJkX3BjaV9maXh1cF9pcnEoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBwY2lfZGV2X3QgZGV2KQogewogCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBWRUNOVU1fRUlSUTIpOwogfQogI2VuZGlmCiAKLS8qCi0gKiBwY2lfcHJlX2luaXQKLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGp1c3QgcHJpb3IgdG8gcmVnaXN0ZXJpbmcgdGhlIGhvc2UgYW5kIGdpdmVzCi0gKiB0aGUgYm9hcmQgdGhlIG9wcG9ydHVuaXR5IHRvIGNoZWNrIHRoaW5ncy4gUmV0dXJuaW5nIGEgdmFsdWUgb2YgemVybwotICogaW5kaWNhdGVzIHRoYXQgdGhpbmdzIGFyZSBiYWQgJiBQQ0kgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGFib3J0ZWQuCi0gKgotICogRGlmZmVyZW50IGJvYXJkcyBtYXkgd2lzaCB0byBjdXN0b21pemUgdGhlIHBjaSBjb250cm9sbGVyIHN0cnVjdHVyZQotICogKGFkZCByZWdpb25zLCBvdmVycmlkZSBkZWZhdWx0IGFjY2VzcyByb3V0aW5lcywgZXRjKSBvciBwZXJmb3JtCi0gKiBjZXJ0YWluIHByZS1pbml0aWFsaXphdGlvbiBhY3Rpb25zLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IHBjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCi0JLyoKLQkgKiBTZXQgcHJpb3JpdHkgZm9yIGFsbCBQTEIzIGRldmljZXMgdG8gMC4KLQkgKiBTZXQgUExCMyBhcmJpdGVyIHRvIGZhaXIgbW9kZS4KLQkgKi8KLQltZnNkcihTRDBfQU1QMSwgYWRkcik7Ci0JbXRzZHIoU0QwX0FNUDEsIChhZGRyICYgMHgwMDAwMDBGRikgfCAweDAwMDBGRjAwKTsKLQlhZGRyID0gbWZkY3IoUExCM19BQ1IpOwotCW10ZGNyKFBMQjNfQUNSLCBhZGRyIHwgMHg4MDAwMDAwMCk7Ci0KLQkvKgotCSAqIFNldCBwcmlvcml0eSBmb3IgYWxsIFBMQjQgZGV2aWNlcyB0byAwLgotCSAqLwotCW1mc2RyKFNEMF9BTVAwLCBhZGRyKTsKLQltdHNkcihTRDBfQU1QMCwgKGFkZHIgJiAweDAwMDAwMEZGKSB8IDB4MDAwMEZGMDApOwotCWFkZHIgPSBtZmRjcihQTEI0X0FDUikgfCAweGEwMDAwMDAwOwkvKiBXYXMgMHg4LS0tLSAqLwotCW10ZGNyKFBMQjRfQUNSLCBhZGRyKTsKLQotCS8qCi0JICogU2V0IE5lYnVsYSBQTEI0IGFyYml0ZXIgdG8gZmFpciBtb2RlLgotCSAqLwotCS8qIFNlZ21lbnQwICovCi0JYWRkciA9IChtZmRjcihQTEIwX0FDUikgJiB+UExCMF9BQ1JfUFBNX01BU0spIHwgUExCMF9BQ1JfUFBNX0ZBSVI7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX0hCVV9NQVNLKSB8IFBMQjBfQUNSX0hCVV9FTkFCTEVEOwotCWFkZHIgPSAoYWRkciAmIH5QTEIwX0FDUl9SRFBfTUFTSykgfCBQTEIwX0FDUl9SRFBfNERFRVA7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX1dSUF9NQVNLKSB8IFBMQjBfQUNSX1dSUF8yREVFUDsKLQltdGRjcihQTEIwX0FDUiwgYWRkcik7Ci0KLQkvKiBTZWdtZW50MSAqLwotCWFkZHIgPSAobWZkY3IoUExCMV9BQ1IpICYgflBMQjFfQUNSX1BQTV9NQVNLKSB8IFBMQjFfQUNSX1BQTV9GQUlSOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9IQlVfTUFTSykgfCBQTEIxX0FDUl9IQlVfRU5BQkxFRDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMV9BQ1JfUkRQX01BU0spIHwgUExCMV9BQ1JfUkRQXzRERUVQOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9XUlBfTUFTSykgfCBQTEIxX0FDUl9XUlBfMkRFRVA7Ci0JbXRkY3IoUExCMV9BQ1IsIGFkZHIpOwotCi0jaWZkZWYgQ09ORklHX1BDSV9QTlAKLQlob3NlLT5maXh1cF9pcnEgPSBzZXF1b2lhX3BjaV9maXh1cF9pcnE7Ci0jZW5kaWYKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KLS8qCi0gKiBwY2lfdGFyZ2V0X2luaXQKLSAqCi0gKiBUaGUgYm9vdHN0cmFwIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBjaQotICogaW5ib3VuZCBtYXAgKFBJTSkuIEJ1dCB0aGUgYm9vdHN0cmFwIGNvbmZpZyBjaG9pY2VzIGFyZSBsaW1pdGVkIGFuZAotICogbWF5IG5vdCBiZSBzdWZmaWNpZW50IGZvciBhIGdpdmVuIGJvYXJkLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKQotdm9pZCBwY2lfdGFyZ2V0X2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCS8qCi0JICogU2V0IHVwIERpcmVjdCBNTUlPIHJlZ2lzdGVycwotCSAqLwotCS8qCi0JICogUG93ZXJQQzQ0MEVQWCBQQ0kgTWFzdGVyIGNvbmZpZ3VyYXRpb24uCi0JICogTWFwIG9uZSAxR2lnIHJhbmdlIG9mIFBMQi9wcm9jZXNzb3IgYWRkcmVzc2VzIHRvIFBDSSBtZW1vcnkgc3BhY2UuCi0JICogUExCIGFkZHJlc3MgMHhBMDAwMDAwMC0weERGRkZGRkZGCi0JICogICAgID09PiBQQ0kgYWRkcmVzcyAweEEwMDAwMDAwLTB4REZGRkZGRkYKLQkgKiBVc2UgYnl0ZSByZXZlcnNlZCBvdXQgcm91dGluZXMgdG8gaGFuZGxlIGVuZGlhbmVzcy4KLQkgKiBNYWtlIHRoaXMgcmVnaW9uIG5vbi1wcmVmZXRjaGFibGUuCi0JICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBNQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgTWFzay9BdHRyaWJ1dGUgKi8KLQkJCQkJCS8qIC0gZGlzYWJsZWQgYjQgc2V0dGluZyAqLwotCW91dDMycihQQ0lMMF9QTU0wTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UpOwkvKiBQTU0wIExvY2FsIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMFBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsgLyogUE1NMCBQQ0kgTG93IEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMFBDSUhBLCAweDAwMDAwMDAwKTsJLyogUE1NMCBQQ0kgSGlnaCBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBNQSwgMHhFMDAwMDAwMSk7CS8qIDUxMk0gKyBObyBwcmVmZXRjaGluZywgKi8KLQkJCQkJCS8qIGFuZCBlbmFibGUgcmVnaW9uICovCi0KLQlvdXQzMnIoUENJTDBfUE1NMU1BLCAweDAwMDAwMDAwKTsJLyogUE1NMCBNYXNrL0F0dHJpYnV0ZSAqLwotCQkJCQkJLyogLSBkaXNhYmxlZCBiNCBzZXR0aW5nICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRTIpOyAvKiBQTU0wIExvY2FsIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMVBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFMik7IC8qIFBNTTAgUENJIExvdyBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFQQ0lIQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgUENJIEhpZ2ggQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0xTUEsIDB4RTAwMDAwMDEpOwkvKiA1MTJNICsgTm8gcHJlZmV0Y2hpbmcsICovCi0JCQkJCQkvKiBhbmQgZW5hYmxlIHJlZ2lvbiAqLwotCi0Jb3V0MzJyKFBDSUwwX1BUTTFNUywgMHgwMDAwMDAwMSk7CS8qIE1lbW9yeSBTaXplL0F0dHJpYnV0ZSAqLwotCW91dDMycihQQ0lMMF9QVE0xTEEsIDApOwkJLyogTG9jYWwgQWRkci4gUmVnICovCi0Jb3V0MzJyKFBDSUwwX1BUTTJNUywgMCk7CQkvKiBNZW1vcnkgU2l6ZS9BdHRyaWJ1dGUgKi8KLQlvdXQzMnIoUENJTDBfUFRNMkxBLCAwKTsJCS8qIExvY2FsIEFkZHIuIFJlZyAqLwotCi0JLyoKLQkgKiBTZXQgdXAgQ29uZmlndXJhdGlvbiByZWdpc3RlcnMKLQkgKi8KLQotCS8qIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZCAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwKLQkJCSAgICAgIENPTkZJR19TWVNfUENJX1NVQlNZU19WRU5ET1JJRCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9TVUJTWVNURU1fSUQsIENPTkZJR19TWVNfUENJX1NVQlNZU19JRCk7Ci0KLQkvKiBDb25maWd1cmUgY29tbWFuZCByZWdpc3RlciBhcyBidXMgbWFzdGVyICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCBQQ0lfQ09NTUFORF9NQVNURVIpOwotCi0JLyogMjQwblMgUENJIGNsb2NrICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9MQVRFTkNZX1RJTUVSLCAxKTsKLQotCS8qIE5vIGVycm9yIHJlcG9ydGluZyAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfRVJSRU4sIDApOwotCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCgwLCBQQ0lfQlJER09QVDIsIDB4MDAwMDAxMDEpOwotCi19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUKQotdm9pZCBwY2lfbWFzdGVyX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXVuc2lnbmVkIHNob3J0IHRlbXBfc2hvcnQ7Ci0KLQkvKgotCSAqIFdyaXRlIHRoZSBQb3dlclBDNDQwIEVQIFBDSSBDb25maWd1cmF0aW9uIHJlZ3MuCi0JICogRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYmUgYSBtYXN0ZXIgb24gdGhlIFBDSSBidXMgKFBNTSkuCi0JICogRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYWN0IGFzIGEgUENJIG1lbW9yeSB0YXJnZXQgKFBUTSkuCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsICZ0ZW1wX3Nob3J0KTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsCi0JCQkgICAgICB0ZW1wX3Nob3J0IHwgUENJX0NPTU1BTkRfTUFTVEVSIHwKLQkJCSAgICAgIFBDSV9DT01NQU5EX01FTU9SWSk7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUKSAqLwotCi0vKgotICogaXNfcGNpX2hvc3QKLSAqCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHBjaSBzY2FuIHNob3VsZCBiZQotICogcGVyZm9ybWVkLiBXaXRoIHZhcmlvdXMgaGFyZHdhcmUgZW52aXJvbm1lbnRzIChlc3BlY2lhbGx5IGNQQ0kgYW5kCi0gKiBQUE1DKSBpdCdzIGluc3VmZmljaWVudCB0byBkZXBlbmQgb24gdGhlIHN0YXRlIG9mIHRoZSBhcmJpdGVyIGVuYWJsZQotICogYml0IGluIHRoZSBzdHJhcCByZWdpc3Rlciwgb3IgZ2VuZXJpYyBob3N0L2FkYXB0ZXIgYXNzdW1wdGlvbnMuCi0gKgotICogUmF0aGVyIHRoYW4gaGFyZC1jb2RlIGEgYmFkIGFzc3VtcHRpb24gaW4gdGhlIGdlbmVyYWwgNDQwIGNvZGUsIHRoZQotICogNDQwIHBjaSBjb2RlIHJlcXVpcmVzIHRoZSBib2FyZCB0byBkZWNpZGUgYXQgcnVudGltZS4KLSAqCi0gKiBSZXR1cm4gMCBmb3IgYWRhcHRlciBtb2RlLCBub24temVybyBmb3IgaG9zdCAobW9uYXJjaCkgbW9kZS4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBpc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyogQ2FjdHVzIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCi0JcmV0dXJuICgxKTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19QT1NUKQotLyoKLSAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cwotICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCi0gKi8KLWludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQotewotCXJldHVybiAwOwkvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLwotfQotI2VuZGlmIC8qIENPTkZJR19QT1NUICovCi0KICNpZiBkZWZpbmVkKENPTkZJR19OQU5EX1VfQk9PVCkgfHwgZGVmaW5lZChDT05GSUdfU1lTX1JBTUJPT1QpCiAvKgogICogT24gTkFORC1ib290aW5nIHNlcXVvaWEsIHdlIG5lZWQgdG8gcGF0Y2ggdGhlIGNoaXBzIHNlbGVjdCBudW1iZXJzCmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3NlcXVvaWEvdS1ib290LmxkcyBiL2JvYXJkL2FtY2Mvc2VxdW9pYS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWVjNTZiLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2FtY2Mvc2VxdW9pYS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAuYm9vdHBnIDB4RkZGRkYwMDAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSguYm9vdHBnKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLQotICBwcGNlbnZfYXNzZXJ0ID0gQVNTRVJUKC4gPCAweEZGRkY4MDAwLCAiLmJzcyBzZWN0aW9uIHRvbyBiaWcsIG92ZXJsYXBzIC5wcGNlbnYgc2VjdGlvbi4gUGxlYXNlIHVwZGF0ZSB5b3VyIGNvbmZndXJhdGlvbjogQ09ORklHX1NZU19NT05JVE9SX0JBU0UsIENPTkZJR19TWVNfTU9OSVRPUl9MRU4gYW5kIFRFWFRfQkFTRSBtYXkgbmVlZCB0byBiZSBtb2RpZmllZC4iKTsKLQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy90YWlodS91LWJvb3QubGRzIGIvYm9hcmQvYW1jYy90YWlodS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzcyMDBkLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2FtY2MvdGFpaHUvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3RhaXNoYW4vdGFpc2hhbi5jIGIvYm9hcmQvYW1jYy90YWlzaGFuL3RhaXNoYW4uYwppbmRleCAwYzIwZmFmLi5jYWM3YTc4IDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3RhaXNoYW4vdGFpc2hhbi5jCisrKyBiL2JvYXJkL2FtY2MvdGFpc2hhbi90YWlzaGFuLmMKQEAgLTIwOSwxMTAgKzIwOSw2IEBACiAJcmV0dXJuICgwKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfcHJlX2luaXQKLSAqCi0gKiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHJlZ2lzdGVyaW5nIHRoZSBob3NlIGFuZCBnaXZlcwotICogIHRoZSBib2FyZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hlY2sgdGhpbmdzLiBSZXR1cm5pbmcgYSB2YWx1ZSBvZiB6ZXJvCi0gKiAgaW5kaWNhdGVzIHRoYXQgdGhpbmdzIGFyZSBiYWQgJiBQQ0kgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGFib3J0ZWQuCi0gKgotICoJRGlmZmVyZW50IGJvYXJkcyBtYXkgd2lzaCB0byBjdXN0b21pemUgdGhlIHBjaSBjb250cm9sbGVyIHN0cnVjdHVyZQotICoJKGFkZCByZWdpb25zLCBvdmVycmlkZSBkZWZhdWx0IGFjY2VzcyByb3V0aW5lcywgZXRjKSBvciBwZXJmb3JtCi0gKgljZXJ0YWluIHByZS1pbml0aWFsaXphdGlvbiBhY3Rpb25zLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IHBjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBob3NlICkKLXsKLQl1bnNpZ25lZCBsb25nIHN0cmFwOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKglUaGUgb2NvdGVhIGJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIHRoZSBob3N0ICYgcmVxdWlyZXMgdGhlCi0JICoJUENJIGFyYml0ZXIgdG8gYmUgZW5hYmxlZC4KLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQltZnNkcihTRFIwX1NEU1RQMSwgc3RyYXApOwotCWlmKCAoc3RyYXAgJiBTRFIwX1NEU1RQMV9QQUVfTUFTSykgPT0gMCApewotCQlwcmludGYoIlBDSTogU0RSMF9TVFJQMVslMDhsWF0gLSBQQ0kgQXJiaXRlciBkaXNhYmxlZC5cbiIsc3RyYXApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX3RhcmdldF9pbml0Ci0gKgotICoJVGhlIGJvb3RzdHJhcCBjb25maWd1cmF0aW9uIHByb3ZpZGVzIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBwY2kKLSAqCWluYm91bmQgbWFwIChQSU0pLiBCdXQgdGhlIGJvb3RzdHJhcCBjb25maWcgY2hvaWNlcyBhcmUgbGltaXRlZCBhbmQKLSAqCW1heSBub3QgYmUgc3VmZmljaWVudCBmb3IgYSBnaXZlbiBib2FyZC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkKLXZvaWQgcGNpX3RhcmdldF9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqIGhvc2UgKQotewotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogRGlzYWJsZSBldmVyeXRoaW5nCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MzJyKCBQQ0lMMF9QSU0wU0EsIDAgKTsgLyogZGlzYWJsZSAqLwotCW91dDMyciggUENJTDBfUElNMVNBLCAwICk7IC8qIGRpc2FibGUgKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTJTQSwgMCApOyAvKiBkaXNhYmxlICovCi0Jb3V0MzJyKCBQQ0lMMF9FUk9NQkEsIDAgKTsgLyogZGlzYWJsZSBleHBhbnNpb24gcm9tICovCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIE1hcCBhbGwgb2YgU0RSQU0gdG8gUENJIGFkZHJlc3MgMHgwMDAwXzAwMDAuIE5vdGUgdGhhdCB0aGUgNDQwIHN0cmFwcGluZwotCSAqIG9wdGlvbnMgdG8gbm90IHN1cHBvcnQgc2l6ZXMgc3VjaCBhcyAxMjgvMjU2IE1CLgotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDMyciggUENJTDBfUElNMExBTCwgQ09ORklHX1NZU19TRFJBTV9CQVNFICk7Ci0Jb3V0MzJyKCBQQ0lMMF9QSU0wTEFILCAwICk7Ci0Jb3V0MzJyKCBQQ0lMMF9QSU0wU0EsIH4oZ2QtPnJhbV9zaXplIC0gMSkgfCAxICk7Ci0KLQlvdXQzMnIoIFBDSUwwX0JBUjAsIDAgKTsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogUHJvZ3JhbSB0aGUgYm9hcmQncyBzdWJzeXN0ZW0gaWQvdmVuZG9yIGlkCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MTZyKCBQQ0lMMF9TQlNZU1ZJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEICk7Ci0Jb3V0MTZyKCBQQ0lMMF9TQlNZU0lELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfREVWSUNFSUQgKTsKLQotCW91dDE2ciggUENJTDBfQ01ELCBpbjE2cihQQ0lMMF9DTUQpIHwgUENJX0NPTU1BTkRfTUVNT1JZICk7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIGlzX3BjaV9ob3N0Ci0gKgotICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYSBwY2kgc2NhbiBzaG91bGQgYmUKLSAqCXBlcmZvcm1lZC4gV2l0aCB2YXJpb3VzIGhhcmR3YXJlIGVudmlyb25tZW50cyAoZXNwZWNpYWxseSBjUENJIGFuZAotICoJUFBNQykgaXQncyBpbnN1ZmZpY2llbnQgdG8gZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYXJiaXRlciBlbmFibGUKLSAqCWJpdCBpbiB0aGUgc3RyYXAgcmVnaXN0ZXIsIG9yIGdlbmVyaWMgaG9zdC9hZGFwdGVyIGFzc3VtcHRpb25zLgotICoKLSAqCVJhdGhlciB0aGFuIGhhcmQtY29kZSBhIGJhZCBhc3N1bXB0aW9uIGluIHRoZSBnZW5lcmFsIDQ0MCBjb2RlLCB0aGUKLSAqCTQ0MCBwY2kgY29kZSByZXF1aXJlcyB0aGUgYm9hcmQgdG8gZGVjaWRlIGF0IHJ1bnRpbWUuCi0gKgotICoJUmV0dXJuIDAgZm9yIGFkYXB0ZXIgbW9kZSwgbm9uLXplcm8gZm9yIGhvc3QgKG1vbmFyY2gpIG1vZGUuCi0gKgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IGlzX3BjaV9ob3N0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQkvKiBUaGUgb2NvdGVhIGJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCi0JcmV0dXJuKDEpOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KLQotI2lmZGVmIENPTkZJR19QT1NUCi0vKgotICogUmV0dXJucyAxIGlmIGtleXMgcHJlc3NlZCB0byBzdGFydCB0aGUgcG93ZXItb24gbG9uZy1ydW5uaW5nIHRlc3RzCi0gKiBDYWxsZWQgZnJvbSBib2FyZF9pbml0X2YoKS4KLSAqLwotaW50IHBvc3RfaG90a2V5c19wcmVzc2VkKHZvaWQpCi17Ci0JcmV0dXJuIChjdHJsYygpKTsKLX0KLSNlbmRpZgotCiBpbnQgYm9hcmRfZXRoX2luaXQoYmRfdCAqYmlzKQogewogCWNwdV9ldGhfaW5pdChiaXMpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy90YWlzaGFuL3UtYm9vdC5sZHMgYi9ib2FyZC9hbWNjL3RhaXNoYW4vdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA0M2Y2OS4uMDAwMDAwMAotLS0gYS9ib2FyZC9hbWNjL3RhaXNoYW4vdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDA0Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC9hbWNjL3RhaXNoYW4vaW5pdC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9hbWNjL3dhbG51dC91LWJvb3QubGRzIGIvYm9hcmQvYW1jYy93YWxudXQvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdhNzg1Ny4uMDAwMDAwMAotLS0gYS9ib2FyZC9hbWNjL3dhbG51dC91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTM1ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy95b3NlbWl0ZS91LWJvb3QubGRzIGIvYm9hcmQvYW1jYy95b3NlbWl0ZS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODY0NmQ1Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2FtY2MveW9zZW1pdGUvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC9hbWNjL3lvc2VtaXRlL2luaXQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy95b3NlbWl0ZS95b3NlbWl0ZS5jIGIvYm9hcmQvYW1jYy95b3NlbWl0ZS95b3NlbWl0ZS5jCmluZGV4IGNjYmViMGUuLjk4YzFmM2IgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MveW9zZW1pdGUveW9zZW1pdGUuYworKysgYi9ib2FyZC9hbWNjL3lvc2VtaXRlL3lvc2VtaXRlLmMKQEAgLTM1MywxNjYgKzM1Myw2IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX3ByZV9pbml0Ci0gKgotICogIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKLSAqICB0aGUgYm9hcmQgdGhlIG9wcG9ydHVuaXR5IHRvIGNoZWNrIHRoaW5ncy4gUmV0dXJuaW5nIGEgdmFsdWUgb2YgemVybwotICogIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgotICoKLSAqCURpZmZlcmVudCBib2FyZHMgbWF5IHdpc2ggdG8gY3VzdG9taXplIHRoZSBwY2kgY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqCShhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQotICoJY2VydGFpbiBwcmUtaW5pdGlhbGl6YXRpb24gYWN0aW9ucy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgIHwgU2V0IHByaW9yaXR5IGZvciBhbGwgUExCMyBkZXZpY2VzIHRvIDAuCi0JICB8IFNldCBQTEIzIGFyYml0ZXIgdG8gZmFpciBtb2RlLgotCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW1mc2RyKFNEMF9BTVAxLCBhZGRyKTsKLQltdHNkcihTRDBfQU1QMSwgKGFkZHIgJiAweDAwMDAwMEZGKSB8IDB4MDAwMEZGMDApOwotCWFkZHIgPSBtZmRjcihQTEIzX0FDUik7Ci0JbXRkY3IoUExCM19BQ1IsIGFkZHIgfCAweDgwMDAwMDAwKTsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgIHwgU2V0IHByaW9yaXR5IGZvciBhbGwgUExCNCBkZXZpY2VzIHRvIDAuCi0JICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbWZzZHIoU0QwX0FNUDAsIGFkZHIpOwotCW10c2RyKFNEMF9BTVAwLCAoYWRkciAmIDB4MDAwMDAwRkYpIHwgMHgwMDAwRkYwMCk7Ci0JYWRkciA9IG1mZGNyKFBMQjRfQUNSKSB8IDB4YTAwMDAwMDA7CS8qIFdhcyAweDgtLS0tICovCi0JbXRkY3IoUExCNF9BQ1IsIGFkZHIpOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAgfCBTZXQgTmVidWxhIFBMQjQgYXJiaXRlciB0byBmYWlyIG1vZGUuCi0JICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JLyogU2VnbWVudDAgKi8KLQlhZGRyID0gKG1mZGNyKFBMQjBfQUNSKSAmIH5QTEIwX0FDUl9QUE1fTUFTSykgfCBQTEIwX0FDUl9QUE1fRkFJUjsKLQlhZGRyID0gKGFkZHIgJiB+UExCMF9BQ1JfSEJVX01BU0spIHwgUExCMF9BQ1JfSEJVX0VOQUJMRUQ7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX1JEUF9NQVNLKSB8IFBMQjBfQUNSX1JEUF80REVFUDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMF9BQ1JfV1JQX01BU0spIHwgUExCMF9BQ1JfV1JQXzJERUVQOwotCW10ZGNyKFBMQjBfQUNSLCBhZGRyKTsKLQotCS8qIFNlZ21lbnQxICovCi0JYWRkciA9IChtZmRjcihQTEIxX0FDUikgJiB+UExCMV9BQ1JfUFBNX01BU0spIHwgUExCMV9BQ1JfUFBNX0ZBSVI7Ci0JYWRkciA9IChhZGRyICYgflBMQjFfQUNSX0hCVV9NQVNLKSB8IFBMQjFfQUNSX0hCVV9FTkFCTEVEOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9SRFBfTUFTSykgfCBQTEIxX0FDUl9SRFBfNERFRVA7Ci0JYWRkciA9IChhZGRyICYgflBMQjFfQUNSX1dSUF9NQVNLKSB8IFBMQjFfQUNSX1dSUF8yREVFUDsKLQltdGRjcihQTEIxX0FDUiwgYWRkcik7Ci0KLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX3RhcmdldF9pbml0Ci0gKgotICoJVGhlIGJvb3RzdHJhcCBjb25maWd1cmF0aW9uIHByb3ZpZGVzIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBwY2kKLSAqCWluYm91bmQgbWFwIChQSU0pLiBCdXQgdGhlIGJvb3RzdHJhcCBjb25maWcgY2hvaWNlcyBhcmUgbGltaXRlZCBhbmQKLSAqCW1heSBub3QgYmUgc3VmZmljaWVudCBmb3IgYSBnaXZlbiBib2FyZC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkKLXZvaWQgcGNpX3RhcmdldF9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFNldCB1cCBEaXJlY3QgTU1JTyByZWdpc3RlcnMKLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAgfCBQb3dlclBDNDQwIEVQIFBDSSBNYXN0ZXIgY29uZmlndXJhdGlvbi4KLQkgIHwgTWFwIG9uZSAxR2lnIHJhbmdlIG9mIFBMQi9wcm9jZXNzb3IgYWRkcmVzc2VzIHRvIFBDSSBtZW1vcnkgc3BhY2UuCi0JICB8ICAgUExCIGFkZHJlc3MgMHhBMDAwMDAwMC0weERGRkZGRkZGID09PiBQQ0kgYWRkcmVzcyAweEEwMDAwMDAwLTB4REZGRkZGRkYKLQkgIHwgICBVc2UgYnl0ZSByZXZlcnNlZCBvdXQgcm91dGluZXMgdG8gaGFuZGxlIGVuZGlhbmVzcy4KLQkgIHwgTWFrZSB0aGlzIHJlZ2lvbiBub24tcHJlZmV0Y2hhYmxlLgotCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlvdXQzMnIoUENJTDBfUE1NME1BLCAweDAwMDAwMDAwKTsJLyogUE1NMCBNYXNrL0F0dHJpYnV0ZSAtIGRpc2FibGVkIGI0IHNldHRpbmcgKi8KLQlvdXQzMnIoUENJTDBfUE1NMExBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsJLyogUE1NMCBMb2NhbCBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBQQ0lMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRSk7CS8qIFBNTTAgUENJIExvdyBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBQQ0lIQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgUENJIEhpZ2ggQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0wTUEsIDB4RTAwMDAwMDEpOwkvKiA1MTJNICsgTm8gcHJlZmV0Y2hpbmcsIGFuZCBlbmFibGUgcmVnaW9uICovCi0KLQlvdXQzMnIoUENJTDBfUE1NMU1BLCAweDAwMDAwMDAwKTsJLyogUE1NMCBNYXNrL0F0dHJpYnV0ZSAtIGRpc2FibGVkIGI0IHNldHRpbmcgKi8KLQlvdXQzMnIoUENJTDBfUE1NMUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFMik7CS8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0xUENJTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UyKTsJLyogUE1NMCBQQ0kgTG93IEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMVBDSUhBLCAweDAwMDAwMDAwKTsJLyogUE1NMCBQQ0kgSGlnaCBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFNQSwgMHhFMDAwMDAwMSk7CS8qIDUxMk0gKyBObyBwcmVmZXRjaGluZywgYW5kIGVuYWJsZSByZWdpb24gKi8KLQotCW91dDMycihQQ0lMMF9QVE0xTVMsIDB4MDAwMDAwMDEpOwkvKiBNZW1vcnkgU2l6ZS9BdHRyaWJ1dGUgKi8KLQlvdXQzMnIoUENJTDBfUFRNMUxBLCAwKTsJLyogTG9jYWwgQWRkci4gUmVnICovCi0Jb3V0MzJyKFBDSUwwX1BUTTJNUywgMCk7CS8qIE1lbW9yeSBTaXplL0F0dHJpYnV0ZSAqLwotCW91dDMycihQQ0lMMF9QVE0yTEEsIDApOwkvKiBMb2NhbCBBZGRyLiBSZWcgKi8KLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogU2V0IHVwIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQkvKiBQcm9ncmFtIHRoZSBib2FyZCdzIHN1YnN5c3RlbSBpZC92ZW5kb3IgaWQgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsCi0JCQkgICAgICBDT05GSUdfU1lTX1BDSV9TVUJTWVNfVkVORE9SSUQpOwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfU1VCU1lTVEVNX0lELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfSUQpOwotCi0JLyogQ29uZmlndXJlIGNvbW1hbmQgcmVnaXN0ZXIgYXMgYnVzIG1hc3RlciAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwgUENJX0NPTU1BTkRfTUFTVEVSKTsKLQotCS8qIDI0MG5TIFBDSSBjbG9jayAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfTEFURU5DWV9USU1FUiwgMSk7Ci0KLQkvKiBObyBlcnJvciByZXBvcnRpbmcgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0VSUkVOLCAwKTsKLQotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoMCwgUENJX0JSREdPUFQyLCAweDAwMDAwMTAxKTsKLQotfQotI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfbWFzdGVyX2luaXQKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9NQVNURVJfSU5JVCkKLXZvaWQgcGNpX21hc3Rlcl9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wX3Nob3J0OwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgIHwgV3JpdGUgdGhlIFBvd2VyUEM0NDAgRVAgUENJIENvbmZpZ3VyYXRpb24gcmVncy4KLQkgIHwgICBFbmFibGUgUG93ZXJQQzQ0MCBFUCB0byBiZSBhIG1hc3RlciBvbiB0aGUgUENJIGJ1cyAoUE1NKS4KLQkgIHwgICBFbmFibGUgUG93ZXJQQzQ0MCBFUCB0byBhY3QgYXMgYSBQQ0kgbWVtb3J5IHRhcmdldCAoUFRNKS4KLQkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsICZ0ZW1wX3Nob3J0KTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsCi0JCQkgICAgICB0ZW1wX3Nob3J0IHwgUENJX0NPTU1BTkRfTUFTVEVSIHwKLQkJCSAgICAgIFBDSV9DT01NQU5EX01FTU9SWSk7Ci19Ci0jZW5kaWYJCQkJLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIGlzX3BjaV9ob3N0Ci0gKgotICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYSBwY2kgc2NhbiBzaG91bGQgYmUKLSAqCXBlcmZvcm1lZC4gV2l0aCB2YXJpb3VzIGhhcmR3YXJlIGVudmlyb25tZW50cyAoZXNwZWNpYWxseSBjUENJIGFuZAotICoJUFBNQykgaXQncyBpbnN1ZmZpY2llbnQgdG8gZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYXJiaXRlciBlbmFibGUKLSAqCWJpdCBpbiB0aGUgc3RyYXAgcmVnaXN0ZXIsIG9yIGdlbmVyaWMgaG9zdC9hZGFwdGVyIGFzc3VtcHRpb25zLgotICoKLSAqCVJhdGhlciB0aGFuIGhhcmQtY29kZSBhIGJhZCBhc3N1bXB0aW9uIGluIHRoZSBnZW5lcmFsIDQ0MCBjb2RlLCB0aGUKLSAqCTQ0MCBwY2kgY29kZSByZXF1aXJlcyB0aGUgYm9hcmQgdG8gZGVjaWRlIGF0IHJ1bnRpbWUuCi0gKgotICoJUmV0dXJuIDAgZm9yIGFkYXB0ZXIgbW9kZSwgbm9uLXplcm8gZm9yIGhvc3QgKG1vbmFyY2gpIG1vZGUuCi0gKgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IGlzX3BjaV9ob3N0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQkvKiBCYW1ib28gaXMgYWx3YXlzIGNvbmZpZ3VyZWQgYXMgaG9zdC4gKi8KLQlyZXR1cm4gKDEpOwotfQotI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBod193YXRjaGRvZ19yZXNldAogICoKICAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzZXQgKGtlZXAgYWxpdmUpIHRoZSB3YXRjaGRvZyB0aW1lcgpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy95dWNjYS91LWJvb3QubGRzIGIvYm9hcmQvYW1jYy95dWNjYS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDQ0YzY0Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2FtY2MveXVjY2EvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDA0Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JCSgudGV4dCkKLSAgICBib2FyZC9hbWNjL3l1Y2NhL2luaXQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvYW1jYy95dWNjYS95dWNjYS5jIGIvYm9hcmQvYW1jYy95dWNjYS95dWNjYS5jCmluZGV4IGQ4ZjRiY2IuLjY3YTAxNjcgMTAwNjQ0Ci0tLSBhL2JvYXJkL2FtY2MveXVjY2EveXVjY2EuYworKysgYi9ib2FyZC9hbWNjL3l1Y2NhL3l1Y2NhLmMKQEAgLTU4OCw5OCArNTg4LDggQEAKIAlyZXR1cm4gZGVmYXVsdF92YWw7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX3ByZV9pbml0Ci0gKgotICogIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKLSAqICB0aGUgYm9hcmQgdGhlIG9wcG9ydHVuaXR5IHRvIGNoZWNrIHRoaW5ncy4gUmV0dXJuaW5nIGEgdmFsdWUgb2YgemVybwotICogIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgotICoKLSAqCURpZmZlcmVudCBib2FyZHMgbWF5IHdpc2ggdG8gY3VzdG9taXplIHRoZSBwY2kgY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqCShhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQotICoJY2VydGFpbiBwcmUtaW5pdGlhbGl6YXRpb24gYWN0aW9ucy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSApCi17Ci0JdW5zaWduZWQgbG9uZyBzdHJhcDsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKglUaGUgeXVjY2EgYm9hcmQgaXMgYWx3YXlzIGNvbmZpZ3VyZWQgYXMgdGhlIGhvc3QgJiByZXF1aXJlcyB0aGUKLQkgKglQQ0kgYXJiaXRlciB0byBiZSBlbmFibGVkLgotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbWZzZHIoU0RSMF9TRFNUUDEsIHN0cmFwKTsKLQlpZiggKHN0cmFwICYgU0RSMF9TRFNUUDFfUEFFX01BU0spID09IDAgKSB7Ci0JCXByaW50ZigiUENJOiBTRFIwX1NUUlAxWyUwOGxYXSAtIFBDSSBBcmJpdGVyIGRpc2FibGVkLlxuIixzdHJhcCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfdGFyZ2V0X2luaXQKLSAqCi0gKglUaGUgYm9vdHN0cmFwIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBjaQotICoJaW5ib3VuZCBtYXAgKFBJTSkuIEJ1dCB0aGUgYm9vdHN0cmFwIGNvbmZpZyBjaG9pY2VzIGFyZSBsaW1pdGVkIGFuZAotICoJbWF5IG5vdCBiZSBzdWZmaWNpZW50IGZvciBhIGdpdmVuIGJvYXJkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKQotdm9pZCBwY2lfdGFyZ2V0X2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSApCi17Ci0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIERpc2FibGUgZXZlcnl0aGluZwotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MzJyKCBQQ0lMMF9QSU0wU0EsIDAgKTsgLyogZGlzYWJsZSAqLwotCW91dDMyciggUENJTDBfUElNMVNBLCAwICk7IC8qIGRpc2FibGUgKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTJTQSwgMCApOyAvKiBkaXNhYmxlICovCi0Jb3V0MzJyKCBQQ0lMMF9FUk9NQkEsIDAgKTsgLyogZGlzYWJsZSBleHBhbnNpb24gcm9tICovCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogTWFwIGFsbCBvZiBTRFJBTSB0byBQQ0kgYWRkcmVzcyAweDAwMDBfMDAwMC4gTm90ZSB0aGF0IHRoZSA0NDAKLQkgKiBzdHJhcHBpbmcgb3B0aW9ucyB0byBub3Qgc3VwcG9ydCBzaXplcyBzdWNoIGFzIDEyOC8yNTYgTUIuCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTBMQUwsIENPTkZJR19TWVNfU0RSQU1fQkFTRSApOwotCW91dDMyciggUENJTDBfUElNMExBSCwgMCApOwotCW91dDMyciggUENJTDBfUElNMFNBLCB+KGdkLT5yYW1fc2l6ZSAtIDEpIHwgMSApOwotCW91dDMyciggUENJTDBfQkFSMCwgMCApOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZAotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MTZyKCBQQ0lMMF9TQlNZU1ZJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEICk7Ci0Jb3V0MTZyKCBQQ0lMMF9TQlNZU0lELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfREVWSUNFSUQgKTsKLQotCW91dDE2ciggUENJTDBfQ01ELCBpbjE2cihQQ0lMMF9DTUQpIHwgUENJX0NPTU1BTkRfTUVNT1JZICk7Ci19Ci0jZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBpc19wY2lfaG9zdAotICoKLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCi0gKglwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKLSAqCVBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCi0gKgliaXQgaW4gdGhlIHN0cmFwIHJlZ2lzdGVyLCBvciBnZW5lcmljIGhvc3QvYWRhcHRlciBhc3N1bXB0aW9ucy4KLSAqCi0gKglSYXRoZXIgdGhhbiBoYXJkLWNvZGUgYSBiYWQgYXNzdW1wdGlvbiBpbiB0aGUgZ2VuZXJhbCA0NDAgY29kZSwgdGhlCi0gKgk0NDAgcGNpIGNvZGUgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGRlY2lkZSBhdCBydW50aW1lLgotICoKLSAqCVJldHVybiAwIGZvciBhZGFwdGVyIG1vZGUsIG5vbi16ZXJvIGZvciBob3N0IChtb25hcmNoKSBtb2RlLgotICoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50IGlzX3BjaV9ob3N0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQkvKiBUaGUgeXVjY2EgYm9hcmQgaXMgYWx3YXlzIGNvbmZpZ3VyZWQgYXMgaG9zdC4gKi8KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCB5dWNjYV9wY2llX2NhcmRfcHJlc2VudChpbnQgcG9ydCkKK2ludCBib2FyZF9wY2llX2NhcmRfcHJlc2VudChpbnQgcG9ydCkKIHsKIAl1MTYgcmVnOwogCkBAIC02OTcsMTg1ICs2MDcsNTQgQEAKIH0KIAogLyoKLSAqIEZvciB0aGUgZ2l2ZW4gc2xvdCwgc2V0IHJvb3Rwb2ludCBtb2RlLCBzZW5kIHBvd2VyIHRvIHRoZSBzbG90LAotICogdHVybiBvbiB0aGUgZ3JlZW4gTEVEIGFuZCB0dXJuIG9mZiB0aGUgeWVsbG93IExFRCwgZW5hYmxlIHRoZSBjbG9jawotICogYW5kIHR1cm4gb2ZmIHJlc2V0LgotICovCi12b2lkIHl1Y2NhX3NldHVwX3BjaWVfZnBnYV9yb290cG9pbnQoaW50IHBvcnQpCi17Ci0JdTE2IHBvd2VyLCBjbG9jaywgZ3JlZW5fbGVkLCB5ZWxsb3dfbGVkLCByZXNldF9vZmYsIHJvb3Rwb2ludCwgZW5kcG9pbnQ7Ci0KLQlzd2l0Y2gocG9ydCkgewotCWNhc2UgMDoKLQkJcm9vdHBvaW50ICAgPSBGUEdBX1JFRzFDX1BFMF9ST09UUE9JTlQ7Ci0JCWVuZHBvaW50ICAgID0gMDsKLQkJcG93ZXIJICAgID0gRlBHQV9SRUcxQV9QRTBfUFdST047Ci0JCWdyZWVuX2xlZCAgID0gRlBHQV9SRUcxQV9QRTBfR0xFRDsKLQkJY2xvY2sJICAgID0gRlBHQV9SRUcxQV9QRTBfUkVGQ0xLX0VOQUJMRTsKLQkJeWVsbG93X2xlZCAgPSBGUEdBX1JFRzFBX1BFMF9ZTEVEOwotCQlyZXNldF9vZmYgICA9IEZQR0FfUkVHMUNfUEUwX1BFUlNUOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXJvb3Rwb2ludCAgID0gMDsKLQkJZW5kcG9pbnQgICAgPSBGUEdBX1JFRzFDX1BFMV9FTkRQT0lOVDsKLQkJcG93ZXIJICAgID0gRlBHQV9SRUcxQV9QRTFfUFdST047Ci0JCWdyZWVuX2xlZCAgID0gRlBHQV9SRUcxQV9QRTFfR0xFRDsKLQkJY2xvY2sJICAgID0gRlBHQV9SRUcxQV9QRTFfUkVGQ0xLX0VOQUJMRTsKLQkJeWVsbG93X2xlZCAgPSBGUEdBX1JFRzFBX1BFMV9ZTEVEOwotCQlyZXNldF9vZmYgICA9IEZQR0FfUkVHMUNfUEUxX1BFUlNUOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXJvb3Rwb2ludCAgID0gMDsKLQkJZW5kcG9pbnQgICAgPSBGUEdBX1JFRzFDX1BFMl9FTkRQT0lOVDsKLQkJcG93ZXIJICAgID0gRlBHQV9SRUcxQV9QRTJfUFdST047Ci0JCWdyZWVuX2xlZCAgID0gRlBHQV9SRUcxQV9QRTJfR0xFRDsKLQkJY2xvY2sJICAgID0gRlBHQV9SRUcxQV9QRTJfUkVGQ0xLX0VOQUJMRTsKLQkJeWVsbG93X2xlZCAgPSBGUEdBX1JFRzFBX1BFMl9ZTEVEOwotCQlyZXNldF9vZmYgICA9IEZQR0FfUkVHMUNfUEUyX1BFUlNUOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0KLQlvdXRfYmUxNigodTE2ICopRlBHQV9SRUcxQSwKLQkJIH4ocG93ZXIgfCBjbG9jayB8IGdyZWVuX2xlZCkgJgotCQkgKHllbGxvd19sZWQgfCBpbl9iZTE2KCh1MTYgKilGUEdBX1JFRzFBKSkpOwotCi0Jb3V0X2JlMTYoKHUxNiAqKUZQR0FfUkVHMUMsCi0JCSB+KGVuZHBvaW50IHwgcmVzZXRfb2ZmKSAmCi0JCSAocm9vdHBvaW50IHwgaW5fYmUxNigodTE2ICopRlBHQV9SRUcxQykpKTsKLQkvKgotCSAqIExlYXZlIGRldmljZSBpbiByZXNldCBmb3IgYSB3aGlsZSBhZnRlciBwb3dlcmluZyBvbiB0aGUKLQkgKiBzbG90IHRvIGdpdmUgaXQgYSBjaGFuY2UgdG8gaW5pdGlhbGl6ZS4KLQkgKi8KLQl1ZGVsYXkoMjUwICogMTAwMCk7Ci0KLQlvdXRfYmUxNigodTE2ICopRlBHQV9SRUcxQywgcmVzZXRfb2ZmIHwgaW5fYmUxNigodTE2ICopRlBHQV9SRUcxQykpOwotfQotLyoKICAqIEZvciB0aGUgZ2l2ZW4gc2xvdCwgc2V0IGVuZHBvaW50IG1vZGUsIHNlbmQgcG93ZXIgdG8gdGhlIHNsb3QsCi0gKiB0dXJuIG9uIHRoZSBncmVlbiBMRUQgYW5kIHR1cm4gb2ZmIHRoZSB5ZWxsb3cgTEVELCBlbmFibGUgdGhlIGNsb2NrCi0gKiAuSW4gZW5kIHBvaW50IG1vZGUgcmVzZXQgYml0IGlzICByZWFkIG9ubHkuCisgKiB0dXJuIG9uIHRoZSBncmVlbiBMRUQgYW5kIHR1cm4gb2ZmIHRoZSB5ZWxsb3cgTEVELCBlbmFibGUgdGhlCisgKiBjbG9jay4gSW4gZW5kIHBvaW50IG1vZGUgcmVzZXQgYml0IGlzIHJlYWQgb25seS4KICAqLwotdm9pZCB5dWNjYV9zZXR1cF9wY2llX2ZwZ2FfZW5kcG9pbnQoaW50IHBvcnQpCit2b2lkIGJvYXJkX3BjaWVfc2V0dXBfcG9ydChpbnQgcG9ydCwgaW50IHJvb3Rwb2ludCkKIHsKLQl1MTYgcG93ZXIsIGNsb2NrLCBncmVlbl9sZWQsIHllbGxvd19sZWQsIHJlc2V0X29mZiwgcm9vdHBvaW50LCBlbmRwb2ludDsKKwl1MTYgcG93ZXIsIGNsb2NrLCBncmVlbl9sZWQsIHllbGxvd19sZWQsCisJCXJlc2V0X29mZiwgcnAsIGVwOwogCi0Jc3dpdGNoKHBvcnQpIHsKKwlzd2l0Y2ggKHBvcnQpIHsKIAljYXNlIDA6Ci0JCXJvb3Rwb2ludCAgID0gRlBHQV9SRUcxQ19QRTBfUk9PVFBPSU5UOwotCQllbmRwb2ludCAgICA9IDA7Ci0JCXBvd2VyCSAgICA9IEZQR0FfUkVHMUFfUEUwX1BXUk9OOwotCQlncmVlbl9sZWQgICA9IEZQR0FfUkVHMUFfUEUwX0dMRUQ7Ci0JCWNsb2NrCSAgICA9IEZQR0FfUkVHMUFfUEUwX1JFRkNMS19FTkFCTEU7Ci0JCXllbGxvd19sZWQgID0gRlBHQV9SRUcxQV9QRTBfWUxFRDsKLQkJcmVzZXRfb2ZmICAgPSBGUEdBX1JFRzFDX1BFMF9QRVJTVDsKKwkJcnAgPSBGUEdBX1JFRzFDX1BFMF9ST09UUE9JTlQ7CisJCWVwID0gMDsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQlyb290cG9pbnQgICA9IDA7Ci0JCWVuZHBvaW50ICAgID0gRlBHQV9SRUcxQ19QRTFfRU5EUE9JTlQ7Ci0JCXBvd2VyCSAgICA9IEZQR0FfUkVHMUFfUEUxX1BXUk9OOwotCQlncmVlbl9sZWQgICA9IEZQR0FfUkVHMUFfUEUxX0dMRUQ7Ci0JCWNsb2NrCSAgICA9IEZQR0FfUkVHMUFfUEUxX1JFRkNMS19FTkFCTEU7Ci0JCXllbGxvd19sZWQgID0gRlBHQV9SRUcxQV9QRTFfWUxFRDsKLQkJcmVzZXRfb2ZmICAgPSBGUEdBX1JFRzFDX1BFMV9QRVJTVDsKKwkJcnAgPSAwOworCQllcCA9IEZQR0FfUkVHMUNfUEUxX0VORFBPSU5UOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCXJvb3Rwb2ludCAgID0gMDsKLQkJZW5kcG9pbnQgICAgPSBGUEdBX1JFRzFDX1BFMl9FTkRQT0lOVDsKLQkJcG93ZXIJICAgID0gRlBHQV9SRUcxQV9QRTJfUFdST047Ci0JCWdyZWVuX2xlZCAgID0gRlBHQV9SRUcxQV9QRTJfR0xFRDsKLQkJY2xvY2sJICAgID0gRlBHQV9SRUcxQV9QRTJfUkVGQ0xLX0VOQUJMRTsKLQkJeWVsbG93X2xlZCAgPSBGUEdBX1JFRzFBX1BFMl9ZTEVEOwotCQlyZXNldF9vZmYgICA9IEZQR0FfUkVHMUNfUEUyX1BFUlNUOworCQlycCA9IDA7CisJCWVwID0gRlBHQV9SRUcxQ19QRTJfRU5EUE9JTlQ7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuOwogCX0KIAotCW91dF9iZTE2KCh1MTYgKilGUEdBX1JFRzFBLAotCQkgfihwb3dlciB8IGNsb2NrIHwgZ3JlZW5fbGVkKSAmCi0JCSAoeWVsbG93X2xlZCB8IGluX2JlMTYoKHUxNiAqKUZQR0FfUkVHMUEpKSk7Ci0KLQlvdXRfYmUxNigodTE2ICopRlBHQV9SRUcxQywKLQkJIH4ocm9vdHBvaW50IHwgcmVzZXRfb2ZmKSAmCi0JCSAoZW5kcG9pbnQgfCBpbl9iZTE2KCh1MTYgKilGUEdBX1JFRzFDKSkpOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIHBjaWVfaG9zZVszXSA9IHt7MH0sezB9LHswfX07Ci0KLXZvaWQgcGNpZV9zZXR1cF9ob3NlcyhpbnQgYnVzbm8pCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCWludCBpLCBidXM7Ci0JaW50IHJldCA9IDA7Ci0JY2hhciAqZW52OwotCXVuc2lnbmVkIGludCBkZWxheTsKLQotCS8qCi0JICogYXNzdW1lIHdlJ3JlIGNhbGxlZCBhZnRlciB0aGUgUENJWCBob3NlIGlzIGluaXRpYWxpemVkLCB3aGljaCB0YWtlcwotCSAqIGJ1cyBJRCAwIGFuZCB0aGVyZWZvcmUgc3RhcnQgbnVtYmVyaW5nIFBDSWUncyBmcm9tIDEuCi0JICovCi0JYnVzID0gYnVzbm87Ci0JZm9yIChpID0gMDsgaSA8PSAyOyBpKyspIHsKLQkJLyogQ2hlY2sgZm9yIHl1Y2NhIGNhcmQgcHJlc2VuY2UgKi8KLQkJaWYgKCF5dWNjYV9wY2llX2NhcmRfcHJlc2VudChpKSkKLQkJCWNvbnRpbnVlOworCXBvd2VyID0gRlBHQV9SRUcxQV9QV1JPTl9FTkNPREUocG9ydCk7CisJZ3JlZW5fbGVkID0gRlBHQV9SRUcxQV9HTEVEX0VOQ09ERShwb3J0KTsKKwljbG9jayA9IEZQR0FfUkVHMUFfUkVGQ0xLX0VOQ09ERShwb3J0KTsKKwl5ZWxsb3dfbGVkID0gRlBHQV9SRUcxQV9ZTEVEX0VOQ09ERShwb3J0KTsKKwlyZXNldF9vZmYgPSBGUEdBX1JFRzFDX1BFUlNUX0VOQ09ERShwb3J0KTsKIAotCQlpZiAoaXNfZW5kX3BvaW50KGkpKSB7Ci0JCQl5dWNjYV9zZXR1cF9wY2llX2ZwZ2FfZW5kcG9pbnQoaSk7Ci0JCQlyZXQgPSBwcGM0eHhfaW5pdF9wY2llX2VuZHBvcnQoaSk7Ci0JCX0gZWxzZSB7Ci0JCQl5dWNjYV9zZXR1cF9wY2llX2ZwZ2Ffcm9vdHBvaW50KGkpOwotCQkJcmV0ID0gcHBjNHh4X2luaXRfcGNpZV9yb290cG9ydChpKTsKLQkJfQotCQlpZiAocmV0ID09IC1FTk9ERVYpCi0JCQljb250aW51ZTsKLQkJaWYgKHJldCkgewotCQkJcHJpbnRmKCJQQ0lFJWQ6IGluaXRpYWxpemF0aW9uIGFzICVzIGZhaWxlZFxuIiwgaSwKLQkJCSAgICAgICBpc19lbmRfcG9pbnQoaSkgPyAiZW5kcG9pbnQiIDogInJvb3QtY29tcGxleCIpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlob3NlID0gJnBjaWVfaG9zZVtpXTsKLQkJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXM7Ci0JCWhvc2UtPmxhc3RfYnVzbm8gPSBidXM7Ci0JCWhvc2UtPmN1cnJlbnRfYnVzbm8gPSBidXM7CisJb3V0X2JlMTYoKHUxNiAqKUZQR0FfUkVHMUEsIH4ocG93ZXIgfCBjbG9jayB8IGdyZWVuX2xlZCkgJgorCQkgKHllbGxvd19sZWQgfCBpbl9iZTE2KCh1MTYgKilGUEdBX1JFRzFBKSkpOwogCi0JCS8qIHNldHVwIG1lbSByZXNvdXJjZSAqLwotCQlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgMCwKLQkJCUNPTkZJR19TWVNfUENJRV9NRU1CQVNFICsgaSAqIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAotCQkJQ09ORklHX1NZU19QQ0lFX01FTUJBU0UgKyBpICogQ09ORklHX1NZU19QQ0lFX01FTVNJWkUsCi0JCQlDT05GSUdfU1lTX1BDSUVfTUVNU0laRSwKLQkJCVBDSV9SRUdJT05fTUVNKTsKLQkJaG9zZS0+cmVnaW9uX2NvdW50ID0gMTsKLQkJcGNpX3JlZ2lzdGVyX2hvc2UoaG9zZSk7CisJb3V0X2JlMTYoKHUxNiAqKUZQR0FfUkVHMUMsIH4oZXAgfCByZXNldF9vZmYpICYKKwkJIChycCB8IGluX2JlMTYoKHUxNiAqKUZQR0FfUkVHMUMpKSk7CiAKLQkJaWYgKGlzX2VuZF9wb2ludChpKSkgewotCQkJcHBjNHh4X3NldHVwX3BjaWVfZW5kcG9pbnQoaG9zZSwgaSk7Ci0JCQkvKgotCQkJICogUmVzb24gZm9yIG5vIHNjYW5uaW5nIGlzIGVuZHBvaW50IGNhbiBub3QgZ2VuZXJhdGUKLQkJCSAqIHVwc3RyZWFtIGNvbmZpZ3VyYXRpb24gYWNjZXNzZXMuCi0JCQkgKi8KLQkJfSBlbHNlIHsKLQkJCXBwYzR4eF9zZXR1cF9wY2llX3Jvb3Rwb2ludChob3NlLCBpKTsKLQkJCWVudiA9IGdldGVudigicGNpc2NhbmRlbGF5Iik7Ci0JCQlpZiAoZW52ICE9IE5VTEwpIHsKLQkJCQlkZWxheSA9IHNpbXBsZV9zdHJ0b3VsKGVudiwgTlVMTCwgMTApOwotCQkJCWlmIChkZWxheSA+IDUpCi0JCQkJCXByaW50ZigiV2FybmluZywgZXhwZWN0IG5vdGljYWJsZSBkZWxheSBiZWZvcmUgIgotCQkJCQkgICAgICAgIlBDSWUgc2NhbiBkdWUgdG8gJ3BjaXNjYW5kZWxheScgdmFsdWUhXG4iKTsKLQkJCQltZGVsYXkoZGVsYXkgKiAxMDAwKTsKLQkJCX0KKwlpZiAocm9vdHBvaW50KSB7CisJCS8qCisJCSAqIExlYXZlIGRldmljZSBpbiByZXNldCBmb3IgYSB3aGlsZSBhZnRlciBwb3dlcmluZyBvbiB0aGUKKwkJICogc2xvdCB0byBnaXZlIGl0IGEgY2hhbmNlIHRvIGluaXRpYWxpemUuCisJCSAqLworCQl1ZGVsYXkoMjUwICogMTAwMCk7CiAKLQkJCS8qCi0JCQkgKiBDb25maWcgYWNjZXNzIGNhbiBvbmx5IGdvIGRvd24gc3RyZWFtCi0JCQkgKi8KLQkJCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOwotCQkJYnVzID0gaG9zZS0+bGFzdF9idXNubyArIDE7Ci0JCX0KKwkJb3V0X2JlMTYoKHUxNiAqKUZQR0FfUkVHMUMsCisJCQkgcmVzZXRfb2ZmIHwgaW5fYmUxNigodTE2ICopRlBHQV9SRUcxQykpOwogCX0KIH0KICNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCkBAIC05MjgsMTcgKzcwNyw2IEBACiAKIAlyZXR1cm47CiB9Ci0KLSNpZmRlZiBDT05GSUdfUE9TVAotLyoKLSAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cwotICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCi0gKi8KLWludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQotewotCXJldHVybiAoY3RybGMoKSk7Ci19Ci0jZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgfCBvbmJvYXJkX3BjaV9hcmJpdGVyX3NlbGVjdGVkID0+IGZyb20gRVBMRApkaWZmIC0tZ2l0IGEvYm9hcmQvYW1pcml4L2FwMTAwMC9jb25maWcubWsgYi9ib2FyZC9hbWlyaXgvYXAxMDAwL2NvbmZpZy5tawppbmRleCBjMDk3ODNhLi4wOWM2ZWZhIDEwMDY0NAotLS0gYS9ib2FyZC9hbWlyaXgvYXAxMDAwL2NvbmZpZy5taworKysgYi9ib2FyZC9hbWlyaXgvYXAxMDAwL2NvbmZpZy5tawpAQCAtMjUsMyArMjUsNiBAQAogIyBsaWtlIGl0J3Mgbm90IGluIFJBTS4gIFRoaXMgaXMgYSBiaXQgb2Ygdm9vZG9vIHRvIGFsbG93IGl0IHRvIGJlCiAjIHJ1biBmcm9tIFJBTSBpbnN0ZWFkIG9mIEZsYXNoLgogVEVYVF9CQVNFID0gMHgwODAwMDAwMAorCisjIFVzZSBib2FyZCBzcGVjaWZpYyBsaW5rZXIgc2NyaXB0CitMRFNDUklQVCA6PSAkKFNSQ1RSRUUpL2JvYXJkL2FtaXJpeC9hcDEwMDAvdS1ib290LmxkcwpkaWZmIC0tZ2l0IGEvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvdGltZXIuYyBiL2JvYXJkL2FybWx0ZC9pbnRlZ3JhdG9yL3RpbWVyLmMKaW5kZXggMDg3Y2Y1OS4uNzU2MmZmYSAxMDA2NDQKLS0tIGEvYm9hcmQvYXJtbHRkL2ludGVncmF0b3IvdGltZXIuYworKysgYi9ib2FyZC9hcm1sdGQvaW50ZWdyYXRvci90aW1lci5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIH0KIAogLyogZGVsYXkgdXNlYyB1c2Vjb25kcyAqLwotdm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl1bG9uZyB0bW8sIHRtcDsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvY201MjAwL2NtNTIwMC5jIGIvYm9hcmQvY201MjAwL2NtNTIwMC5jCmluZGV4IDllMmYxYTUuLjBiNTQxMmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2NtNTIwMC9jbTUyMDAuYworKysgYi9ib2FyZC9jbTUyMDAvY201MjAwLmMKQEAgLTMzMCwxNCArMzMwLDYgQEAKIH0KIAogCi0jaWZkZWYgQ09ORklHX1BPU1QKLWludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmIC8qIENPTkZJR19QT1NUICovCi0KLQogI2lmIGRlZmluZWQoQ09ORklHX1BPU1QpIHx8IGRlZmluZWQoQ09ORklHX0xPR0JVRkZFUikKIHZvaWQgcG9zdF93b3JkX3N0b3JlKHVsb25nIGEpCiB7CmRpZmYgLS1naXQgYS9ib2FyZC9jcmF5L0wxL3UtYm9vdC5sZHMgYi9ib2FyZC9jcmF5L0wxL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkODBkZjYuLjAwMDAwMDAKLS0tIGEvYm9hcmQvY3JheS9MMS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC9jcmF5L0wxL2luaXQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC90cmFwcy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2ludGVycnVwdHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC80eHhfdWFydC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCi0gICAgZHJpdmVycy9uZXQvNHh4X2VuZXQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLS8qLiA9IGVudl9vZmZzZXQ7Ki8KLSAgICBjb21tb24vZW52X2VtYmVkZGVkLm8oLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvY3NiMjcyL3UtYm9vdC5sZHMgYi9ib2FyZC9jc2IyNzIvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU4Y2NjNS4uMDAwMDAwMAotLS0gYS9ib2FyZC9jc2IyNzIvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvY3NiMjcyL2luaXQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9rZ2RiLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvdHJhcHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvNHh4X3VhcnQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9jcHVfaW5pdC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L3NwZWVkLm8JKC50ZXh0KQotICAgIGRyaXZlcnMvbmV0LzR4eF9lbmV0Lm8JKC50ZXh0KQotICAgIGNvbW1vbi9kbG1hbGxvYy5vCSgudGV4dCkKLSAgICBsaWJfZ2VuZXJpYy9jcmMzMi5vCQkoLnRleHQpCi0KLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX3BwYy9ib2FyZC5vCSgudGV4dCkKLSAgICBsaWJfZ2VuZXJpYy96bGliLm8JKC50ZXh0KQotLyogICAgLiA9IGVudl9vZmZzZXQ7Ki8KLS8qICAgIGNvbW1vbi9lbnZfZW1iZWRkZWQubygudGV4dCkqLwotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2NzYjQ3Mi91LWJvb3QubGRzIGIvYm9hcmQvY3NiNDcyL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMzdjMWIuLjAwMDAwMDAKLS0tIGEvYm9hcmQvY3NiNDcyL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL2NzYjQ3Mi9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgva2dkYi5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L3RyYXBzLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvaW50ZXJydXB0cy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4LzR4eF91YXJ0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvY3B1X2luaXQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9zcGVlZC5vCSgudGV4dCkKLSAgICBkcml2ZXJzL25ldC80eHhfZW5ldC5vCSgudGV4dCkKLSAgICBjb21tb24vZGxtYWxsb2MubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvY3JjMzIubwkJKC50ZXh0KQotCi0gICAgbGliX3BwYy9leHRhYmxlLm8JKC50ZXh0KQotICAgIGxpYl9wcGMvYm9hcmQubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCSgudGV4dCkKLS8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCi0vKiAgICBjb21tb24vZW52X2VtYmVkZGVkLm8oLnRleHQpKi8KLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9kYXZlL1BQQ2hhbWVsZW9uRVZCL3UtYm9vdC5sZHMgYi9ib2FyZC9kYXZlL1BQQ2hhbWVsZW9uRVZCL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlN2Y1OWUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZGF2ZS9QUENoYW1lbGVvbkVWQi91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC90cmFwcy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2ludGVycnVwdHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC80eHhfdWFydC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCi0gICAgZHJpdmVycy9uZXQvNHh4X2VuZXQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotCi0gIHBwY2Vudl9hc3NlcnQgPSBBU1NFUlQoLiA8IDB4RkZGRjgwMDAsICIuYnNzIHNlY3Rpb24gdG9vIGJpZywgb3ZlcmxhcHMgLnBwY2VudiBzZWN0aW9uLiBQbGVhc2UgdXBkYXRlIHlvdXIgY29uZmd1cmF0aW9uOiBDT05GSUdfU1lTX01PTklUT1JfQkFTRSwgQ09ORklHX1NZU19NT05JVE9SX0xFTiBhbmQgVEVYVF9CQVNFIG1heSBuZWVkIHRvIGJlIG1vZGlmaWVkLiIpOwotICAuID0gMHhGRkZGODAwMDsKLSAgLnBwY2VudiA6Ci0gIHsKLSAgICBjb21tb24vZW52X2VtYmVkZGVkLm8oLnBwY2Vudik7Ci0gIH0KLQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9jb21tb24vbWlzYy5jIGIvYm9hcmQvZGF2aW5jaS9jb21tb24vbWlzYy5jCmluZGV4IGZmZGMyMGIuLjlmYWI3NmYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RhdmluY2kvY29tbW9uL21pc2MuYworKysgYi9ib2FyZC9kYXZpbmNpL2NvbW1vbi9taXNjLmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogTWlzY2VsYW5lb3VzIERhVmluY2kgZnVuY3Rpb25zLgogICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOaWNrIFRob21wc29uLCBHRSBGYW51YyBMdGQsIDxuaWNrLnRob21wc29uQGdlZmFudWMuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA3IFNlcmdleSBLdWJ1c2h5biA8a3NpQGtvaTgubmV0PgogICogQ29weXJpZ2h0IChDKSAyMDA4IEx5cnRlY2ggPHd3dy5seXJ0ZWNoLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cy4KQEAgLTI3LDcgKzI4LDggQEAKICNpbmNsdWRlIDxpMmMuaD4KICNpbmNsdWRlIDxuZXQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSAibWlzYy5oIgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIApAQCAtMTA5LDMgKzExMSw0NyBAQAogfQogCiAjZW5kaWYJLyogREFWSU5DSV9FTUFDICovCisKKy8qCisgKiBDaGFuZ2UgdGhlIHNldHRpbmcgb2YgYSBwaW4gbXVsdGlwbGV4ZXIgZmllbGQuCisgKgorICogVGFrZXMgYW4gYXJyYXkgb2YgcGlubXV4IHNldHRpbmdzIHNpbWlsYXIgdG86CisgKgorICogc3RydWN0IHBpbm11eF9jb25maWcgdWFydF9waW5zW10gPSB7CisgKgl7ICZkYXZpbmNpX3N5c2NmZ19yZWdzLT5waW5tdXhbOF0sIDIsIDcgfSwKKyAqCXsgJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPnBpbm11eFs5XSwgMiwgMCB9CisgKiB9OworICoKKyAqIFN0ZXBwaW5nIHRocm91Z2ggdGhlIGFycmF5LCBlYWNoIHBpbm11eFtuXSByZWdpc3RlciBoYXMgdGhlIGdpdmVuIHZhbHVlCisgKiBzZXQgaW4gdGhlIHBpbiBtdXggZmllbGQgc3BlY2lmaWVkLgorICoKKyAqIFRoZSBudW1iZXIgb2YgcGlucyBpbiB0aGUgYXJyYXkgbXVzdCBiZSBwYXNzZWQgKEFSUkFZX1NJWkUgY2FuIHByb3ZpZGUKKyAqIHRoaXMgdmFsdWUgY29udmVuaWVudGx5KS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgYWxsIGZpZWxkIG51bWJlcnMgYW5kIHZhbHVlcyBhcmUgaW4gdGhlIGNvcnJlY3QgcmFuZ2UsCisgKiBlbHNlIHJldHVybnMgLTEuCisgKi8KK2ludCBkYXZpbmNpX2NvbmZpZ3VyZV9waW5fbXV4KGNvbnN0IHN0cnVjdCBwaW5tdXhfY29uZmlnICpwaW5zLAorCQkJICAgICAgY29uc3QgaW50IG5fcGlucykKK3sKKwlpbnQgaTsKKworCS8qIGNoZWNrIGZvciBpbnZhbGlkIHBpbm11eCB2YWx1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbl9waW5zOyBpKyspIHsKKwkJaWYgKHBpbnNbaV0uZmllbGQgPj0gUElOX01VWF9OVU1fRklFTERTIHx8CisJCSAgICAocGluc1tpXS52YWx1ZSAmIH5QSU5fTVVYX0ZJRUxEX01BU0spICE9IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJLyogY29uZmlndXJlIHRoZSBwaW5tdXhlcyAqLworCWZvciAoaSA9IDA7IGkgPCBuX3BpbnM7IGkrKykgeworCQljb25zdCBpbnQgb2Zmc2V0ID0gcGluc1tpXS5maWVsZCAqIFBJTl9NVVhfRklFTERfU0laRTsKKwkJY29uc3QgdW5zaWduZWQgaW50IHZhbHVlID0gcGluc1tpXS52YWx1ZSA8PCBvZmZzZXQ7CisJCWNvbnN0IHVuc2lnbmVkIGludCBtYXNrID0gUElOX01VWF9GSUVMRF9NQVNLIDw8IG9mZnNldDsKKwkJY29uc3QgZHZfcmVnICptdXggPSBwaW5zW2ldLm11eDsKKworCQl3cml0ZWwodmFsdWUgfCAocmVhZGwobXV4KSAmICh+bWFzaykpLCBtdXgpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9jb21tb24vbWlzYy5oIGIvYm9hcmQvZGF2aW5jaS9jb21tb24vbWlzYy5oCmluZGV4IGRjM2NjNDEuLmY2ZDhiMWIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RhdmluY2kvY29tbW9uL21pc2MuaAorKysgYi9ib2FyZC9kYXZpbmNpL2NvbW1vbi9taXNjLmgKQEAgLTIyLDggKzIyLDIwIEBACiAjaWZuZGVmIF9fTUlTQ19ICiAjZGVmaW5lIF9fTUlTQ19ICiAKKy8qIHBpbiBtdXhlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQSU5fTVVYX05VTV9GSUVMRFMJOAkvKiBQZXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUElOX01VWF9GSUVMRF9TSVpFCTQJLyogbiBpbiBiaXRzICovCisjZGVmaW5lIFBJTl9NVVhfRklFTERfTUFTSwkoKDEgPDwgUElOX01VWF9GSUVMRF9TSVpFKSAtIDEpCisKKy8qIHBpbiBkZWZpbml0aW9uICovCitzdHJ1Y3QgcGlubXV4X2NvbmZpZyB7CisJZHZfcmVnCQkqbXV4OwkJLyogQWRkcmVzcyBvZiBtdXggcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyCXZhbHVlOwkJLyogVmFsdWUgdG8gc2V0IGluIGZpZWxkICovCisJdW5zaWduZWQgY2hhcglmaWVsZDsJCS8qIGZpZWxkIG51bWJlciAqLworfTsKIAogaW50IGR2ZXZtX3JlYWRfbWFjX2FkZHJlc3ModWludDhfdCAqYnVmKTsKIHZvaWQgZHZfY29uZmlndXJlX21hY19hZGRyZXNzKHVpbnQ4X3QgKnJvbV9lbmV0YWRkcik7CitpbnQgZGF2aW5jaV9jb25maWd1cmVfcGluX211eChjb25zdCBzdHJ1Y3QgcGlubXV4X2NvbmZpZyAqcGlucywgaW50IG5fcGlucyk7CiAKICNlbmRpZiAvKiBfX01JU0NfSCAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZGF2aW5jaS9kYTgzMGV2bS9NYWtlZmlsZSBiL2JvYXJkL2RhdmluY2kvZGE4MzBldm0vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2MzZmYQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RhdmluY2kvZGE4MzBldm0vTWFrZWZpbGUKQEAgLTAsMCArMSw1MSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEsIDIwMDIKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNlcmdleSBLdWJ1c2h5biA8a3NpQGtvaTgubmV0PgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gJChvYmopbGliJChCT0FSRCkuYQorCitDT0JKUwk6PSBkYTgzMGV2bS5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQob2JqKS5kZXBlbmQgJChPQkpTKSAkKFNPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKSAkKFNPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAqfiAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGhpcyBpcyBmb3IgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2RhdmluY2kvZGE4MzBldm0vY29uZmlnLm1rIGIvYm9hcmQvZGF2aW5jaS9kYTgzMGV2bS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhMjlhOQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RhdmluY2kvZGE4MzBldm0vY29uZmlnLm1rCkBAIC0wLDAgKzEsNDMgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA4LCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLiBodHRwOi8vd3d3LnRpLmNvbS8KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNlcmdleSBLdWJ1c2h5biA8a3NpQGtvaTgubmV0PgorIworIyAoQykgQ29weXJpZ2h0IDIwMDIKKyMgR2FyeSBKZW5uZWpvaG4sIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxnakBkZW54LmRlPgorIyBEYXZpZCBNdWVsbGVyLCBFTFNPRlQgQUcsIDxkLm11ZWxsZXJAZWxzb2Z0LmNoPgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLglTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMgVGV4YXMgSW5zdHJ1bWVudHMgREE4eHggRVZNIGJvYXJkIChBUk05MjVFSlMpIGNwdQorIyBzZWUgaHR0cDovL3d3dy50aS5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFRleGFzIEluc3RydW1lbnRzCisjCisjIERBOHh4IEVWTSBoYXMgMSBiYW5rIG9mIDY0IE1CIFNEUkFNICgyIDE2TWVnIHgxNiBjaGlwcykuCisjIFBoeXNpY2FsIEFkZHJlc3M6CisjIEMwMDAnMDAwMCB0byBDNDAwJzAwMDAKKyMKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IEMwMDAnODAwMCwgZW50cnkgQzAwMCc4MDAwCisjIChtZW0gYmFzZSArIHJlc2VydmVkKQorIworIyB3ZSBsb2FkIG91cnNlbGYgdG8gQzEwOCAnMDAwMAorCisKKyNQcm92aWRlIGF0IGxlYXN0IDE2TUIgc3BhY2luZyBiZXR3ZWVuIHVzIGFuZCB0aGUgTGludXggS2VybmVsIGltYWdlCitURVhUX0JBU0UgPSAweEMxMDgwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL2RhODMwZXZtL2RhODMwZXZtLmMgYi9ib2FyZC9kYXZpbmNpL2RhODMwZXZtL2RhODMwZXZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4Y2MzYwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2RhdmluY2kvZGE4MzBldm0vZGE4MzBldm0uYwpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOaWNrIFRob21wc29uLCBHRSBGYW51YywgTHRkLiA8bmljay50aG9tcHNvbkBnZWZhbnVjLmNvbT4KKyAqCisgKiBCYXNlIG9uIGNvZGUgZnJvbSBUSS4gT3JpZ2luYWwgTm90aWNlcyBmb2xsb3c6CisgKgorICogKEMpIENvcHlyaWdodCAyMDA4LCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLiBodHRwOi8vd3d3LnRpLmNvbS8KKyAqCisgKiBNb2RpZmllZCBmb3IgREE4eHggRVZNLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTZXJnZXkgS3VidXNoeW4gPGtzaUBrb2k4Lm5ldD4KKyAqCisgKiBQYXJ0cyBhcmUgc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gdmFyaW91cyBUSSBzb3VyY2VzLCBvcmlnaW5hbCBjb3B5cmlnaHQKKyAqIGZvbGxvd3M6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cy4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8aTJjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlICIuLi9jb21tb24vbWlzYy5oIgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2RlZmluZSBwaW5tdXgJJmRhdmluY2lfc3lzY2ZnX3JlZ3MtPnBpbm11eAorCisjaWZkZWYgQ09ORklHX1NQSV9GTEFTSAorLyogU1BJMCBwaW4gbXV4ZXIgc2V0dGluZ3MgKi8KK2NvbnN0IHN0cnVjdCBwaW5tdXhfY29uZmlnIHNwaTBfcGluc1tdID0geworCXsgcGlubXV4WzddLCAxLCAzIH0sCisJeyBwaW5tdXhbN10sIDEsIDQgfSwKKwl7IHBpbm11eFs3XSwgMSwgNSB9LAorCXsgcGlubXV4WzddLCAxLCA2IH0sCisJeyBwaW5tdXhbN10sIDEsIDcgfQorfTsKKyNlbmRpZgorCisvKiBVQVJUIHBpbiBtdXhlciBzZXR0aW5ncyAqLworY29uc3Qgc3RydWN0IHBpbm11eF9jb25maWcgdWFydF9waW5zW10gPSB7CisJeyBwaW5tdXhbOF0sIDIsIDcgfSwKKwl7IHBpbm11eFs5XSwgMiwgMCB9Cit9OworCisvKiBJMkMgcGluIG11eGVyIHNldHRpbmdzICovCitjb25zdCBzdHJ1Y3QgcGlubXV4X2NvbmZpZyBpMmNfcGluc1tdID0geworCXsgcGlubXV4WzldLCAyLCAzIH0sCisJeyBwaW5tdXhbOV0sIDIsIDQgfQorfTsKKworaW50IGJvYXJkX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgQ09ORklHX1VTRV9JUlEKKwkvKgorCSAqIE1hc2sgYWxsIElSUXMgYnkgY2xlYXJpbmcgdGhlIGdsb2JhbCBlbmFibGUgYW5kIHNldHRpbmcKKwkgKiB0aGUgZW5hYmxlIGNsZWFyIGZvciBhbGwgdGhlIDkwIGludGVycnVwdHMuCisJICovCisKKwl3cml0ZWwoMCwgJmRhdmluY2lfYWludGNfcmVncy0+Z2VyKTsKKworCXdyaXRlbCgwLCAmZGF2aW5jaV9haW50Y19yZWdzLT5oaWVyKTsKKworCXdyaXRlbCgweGZmZmZmZmZmLCAmZGF2aW5jaV9haW50Y19yZWdzLT5lY3IxKTsKKwl3cml0ZWwoMHhmZmZmZmZmZiwgJmRhdmluY2lfYWludGNfcmVncy0+ZWNyMik7CisJd3JpdGVsKDB4ZmZmZmZmZmYsICZkYXZpbmNpX2FpbnRjX3JlZ3MtPmVjcjMpOworI2VuZGlmCisKKwkvKiBhcmNoIG51bWJlciBvZiB0aGUgYm9hcmQgKi8KKwlnZC0+YmQtPmJpX2FyY2hfbnVtYmVyID0gTUFDSF9UWVBFX0RBVklOQ0lfREE4MzBfRVZNOworCisJLyogYWRkcmVzcyBvZiBib290IHBhcmFtZXRlcnMgKi8KKwlnZC0+YmQtPmJpX2Jvb3RfcGFyYW1zID0gTElOVVhfQk9PVF9QQVJBTV9BRERSOworCisJLyoKKwkgKiBQb3dlciBvbiByZXF1aXJlZCBwZXJpcGhlcmFscworCSAqIEFSTSBkb2VzIG5vdCBoYXZlIGFjY2VzcyBieSBkZWZhdWx0IHRvIFBTQzAgYW5kIFBTQzEKKwkgKiBhc3N1bWluZyBoZXJlIHRoYXQgdGhlIERTUCBib290bG9hZGVyIGhhcyBzZXQgdGhlIElPUFUKKwkgKiBzdWNoIHRoYXQgUFNDIGFjY2VzcyBpcyBhdmFpbGFibGUgdG8gQVJNCisJICovCisJbHBzY19vbihEQVZJTkNJX0xQU0NfQUVNSUYpOyAgICAvKiBOQU5ELCBOT1IgKi8KKwlscHNjX29uKERBVklOQ0lfTFBTQ19TUEkwKTsgICAgIC8qIFNlcmlhbCBGbGFzaCAqLworCWxwc2Nfb24oREFWSU5DSV9MUFNDX0VNQUMpOyAgICAgLyogaW1hZ2UgZG93bmxvYWQgKi8KKwlscHNjX29uKERBVklOQ0lfTFBTQ19VQVJUMik7ICAgIC8qIGNvbnNvbGUgKi8KKwlscHNjX29uKERBVklOQ0lfTFBTQ19HUElPKTsKKworCS8qIHNldHVwIHRoZSBTVVNQU1JDIGZvciBBUk0gdG8gY29udHJvbCBlbXVsYXRpb24gc3VzcGVuZCAqLworCXdyaXRlbChyZWFkbCgmZGF2aW5jaV9zeXNjZmdfcmVncy0+c3VzcHNyYykgJgorCSAgICAgICB+KERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfRU1BQyB8IERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfSTJDIHwKKwkJIERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfU1BJMCB8IERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfVElNRVIwIHwKKwkJIERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfVUFSVDIpLAorCSAgICAgICAmZGF2aW5jaV9zeXNjZmdfcmVncy0+c3VzcHNyYyk7CisKKyNpZmRlZiBDT05GSUdfU1BJX0ZMQVNICisJaWYgKGRhdmluY2lfY29uZmlndXJlX3Bpbl9tdXgoc3BpMF9waW5zLCBBUlJBWV9TSVpFKHNwaTBfcGlucykpICE9IDApCisJCXJldHVybiAxOworI2VuZGlmCisKKwlpZiAoZGF2aW5jaV9jb25maWd1cmVfcGluX211eCh1YXJ0X3BpbnMsIEFSUkFZX1NJWkUodWFydF9waW5zKSkgIT0gMCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoZGF2aW5jaV9jb25maWd1cmVfcGluX211eChpMmNfcGlucywgQVJSQVlfU0laRShpMmNfcGlucykpICE9IDApCisJCXJldHVybiAxOworCisJLyogZW5hYmxlIHRoZSBjb25zb2xlIFVBUlQgKi8KKwl3cml0ZWwoKERBVklOQ0lfVUFSVF9QV1JFTVVfTUdNVF9GUkVFIHwgREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX1VSUlNUIHwKKwkJREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX1VUUlNUKSwKKwkgICAgICAgJmRhdmluY2lfdWFydDJfY3RybF9yZWdzLT5wd3JlbXVfbWdtdCk7CisKKwlyZXR1cm4oMCk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9kYXZpbmNpL2RtNjQ2N2V2bS9kbTY0Njdldm0uYyBiL2JvYXJkL2RhdmluY2kvZG02NDY3ZXZtL2RtNjQ2N2V2bS5jCmluZGV4IGFjM2IyODIuLjk5NGE5YWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2RhdmluY2kvZG02NDY3ZXZtL2RtNjQ2N2V2bS5jCisrKyBiL2JvYXJkL2RhdmluY2kvZG02NDY3ZXZtL2RtNjQ2N2V2bS5jCkBAIC0xOCw2ICsxOCw4IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxuYW5kLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbmFuZF9kZWZzLmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCkBAIC0yOCwzICszMCwxMiBAQAogCiAJcmV0dXJuIDA7CiB9CisKKyNpZmRlZiBDT05GSUdfTkFORF9EQVZJTkNJCitpbnQgYm9hcmRfbmFuZF9pbml0KHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQpCit7CisJZGF2aW5jaV9uYW5kX2luaXQobmFuZCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvZU5FVC9jb25maWcubWsgYi9ib2FyZC9lTkVUL2NvbmZpZy5tawppbmRleCBhNzYzODQxLi41YzY0ODA0IDEwMDY0NAotLS0gYS9ib2FyZC9lTkVUL2NvbmZpZy5taworKysgYi9ib2FyZC9lTkVUL2NvbmZpZy5tawpAQCAtMjIsMyArMjIsNyBAQAogIwogCiBURVhUX0JBU0UgPSAweDM4MDQwMDAwCitDRkxBR1NfZGxtYWxsb2MubyArPSAtV2EsLS1uby13YXJuIC1mbm8tc3RyaWN0LWFsaWFzaW5nCitQTEFURk9STV9SRUxGTEFHUyArPSAtZnZpc2liaWxpdHk9aGlkZGVuCitQTEFURk9STV9DUFBGTEFHUyArPSAtZm5vLWR3YXJmMi1jZmktYXNtCitQTEFURk9STV9MREZMQUdTICs9IC1waWMgLS1lbWl0LXJlbG9jcyAtQnN5bWJvbGljIC1Cc3ltYm9saWMtZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9ib2FyZC9lTkVUL2VORVQuYyBiL2JvYXJkL2VORVQvZU5FVC5jCmluZGV4IDI5Y2YyOTUuLjZkMGIxNWEgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VORVQvZU5FVC5jCisrKyBiL2JvYXJkL2VORVQvZU5FVC5jCkBAIC00Nyw3ICs0Nyw2IEBACiB7CiAJLyogU2V0IENQVSBTcGVlZCB0byAxMDBNSHogKi8KIAlzYzUyMF9tbWNyLT5jcHVjdGwgPSAweDAxOwotCWdkLT5jcHVfY2xrID0gMTAwMDAwMDAwOwogCiAJLyogd2FpdCBhdCBsZWFzdCBvbmUgbWlsbGlzZWNvbmQgKi8KIAlhc20oIm1vdmwJJDB4MjAwMCwlJWVjeFxuIgpAQCAtNjcsNyArNjYsNyBAQAogLyoKICAqIE1pc2NlbGxhbmVvdXMgcGxhdGZvcm0gZGVwZW5kZW50IGluaXRpYWxpemF0aW9ucwogICovCi1pbnQgYm9hcmRfaW5pdCh2b2lkKQoraW50IGJvYXJkX2Vhcmx5X2luaXRfZih2b2lkKQogewogCWluaXRfc2M1MjBfZW5ldCgpOwogCkBAIC0xMTcsNiArMTE2LDE0IEBACiAJc2M1MjBfbW1jci0+c3lzYXJiY3RsID0gMHgwNjsKIAlzYzUyMF9tbWNyLT5zeXNhcmJtZW5iID0gMHgwMDAzOwogCisJcmV0dXJuIDA7Cit9CisKK2ludCBib2FyZF9lYXJseV9pbml0X3Iodm9pZCkKK3sKKwkvKiBDUFUgU3BlZWQgdG8gMTAwTUh6ICovCisJZ2QtPmNwdV9jbGsgPSAxMDAwMDAwMDA7CisKIAkvKiBDcnlzdGFsIGlzIDMzLjAwME1IeiAqLwogCWdkLT5idXNfY2xrID0gMzMwMDAwMDA7CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2VORVQvZU5FVF9zdGFydDE2LlMgYi9ib2FyZC9lTkVUL2VORVRfc3RhcnQxNi5TCmluZGV4IDQ4ZTRkODMuLmFmMmMxMzIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VORVQvZU5FVF9zdGFydDE2LlMKKysrIGIvYm9hcmQvZU5FVC9lTkVUX3N0YXJ0MTYuUwpAQCAtNzEsNiArNzEsOCBAQAogLnNlY3Rpb24gLmJpb3MsICJheCIKIC5jb2RlMTYKIC5nbG9ibCByZWFsbW9kZV9yZXNldAorLmhpZGRlbiByZWFsbW9kZV9yZXNldAorLnR5cGUgcmVhbG1vZGVfcmVzZXQsIEBmdW5jdGlvbgogcmVhbG1vZGVfcmVzZXQ6CiAJLyogQWxpYXMgTU1DUiB0byAweGRmMDAwICovCiAJbW92dwkkMHhmZmZjLCAlZHgKZGlmZiAtLWdpdCBhL2JvYXJkL2VORVQvdS1ib290LmxkcyBiL2JvYXJkL2VORVQvdS1ib290LmxkcwppbmRleCA0ZWE0MjRkLi4wZDc0MDIxIDEwMDY0NAotLS0gYS9ib2FyZC9lTkVUL3UtYm9vdC5sZHMKKysrIGIvYm9hcmQvZU5FVC91LWJvb3QubGRzCkBAIC0yOCwyOCArMjgsNDggQEAKIFNFQ1RJT05TCiB7CiAJLiA9IDB4MzgwNDAwMDA7CQkvKiBMb2NhdGlvbiBvZiBib290Y29kZSBpbiBmbGFzaCAqLworCV9pMzg2Ym9vdF90ZXh0X3N0YXJ0ID0gLjsKIAkudGV4dCAgOiB7ICooLnRleHQpOyB9CiAKIAkuID0gQUxJR04oNCk7CiAJLnJvZGF0YSA6IHsgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkgfQogCiAJX2kzODZib290X3RleHRfc2l6ZSA9IFNJWkVPRigudGV4dCkgKyBTSVpFT0YoLnJvZGF0YSk7CisJLiA9IEFMSUdOKDQpOworCisJLmRhdGEgOiB7ICooLmRhdGEpIH0KKwkuID0gQUxJR04oNCk7CisKKwkuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KKwkuID0gQUxJR04oNCk7CisKKwkuZHluc3ltIDogeyAqKC5keW5zeW0pIH0KKwkuID0gQUxJR04oNCk7CiAKLQkuID0gMHgwM0ZGMDAwMDsJCS8qIFJhbSBkYXRhIHNlZ21lbnQgdG8gdXNlICovCi0JX2kzODZib290X3JvbWRhdGFfZGVzdCA9IEFCU09MVVRFKC4pOwotCS5kYXRhIDogQVQgKCBMT0FEQUREUigucm9kYXRhKSArIFNJWkVPRigucm9kYXRhKSApIHsgKiguZGF0YSkgfQotCV9pMzg2Ym9vdF9yb21kYXRhX3N0YXJ0ID0gTE9BREFERFIoLmRhdGEpOworCS5keW5zdHIgOiB7ICooLmR5bnN0cikgfQorCS4gPSBBTElHTig0KTsKKworCS5oYXNoIDogeyAqKC5oYXNoKSB9CisJLiA9IEFMSUdOKDQpOwogCisJLmdvdCA6IHsgKiguZ290KSB9CiAJLiA9IEFMSUdOKDQpOwotCS5nb3QgOiBBVCAoIExPQURBRERSKC5kYXRhKSArIFNJWkVPRiguZGF0YSkgKSB7ICooLmdvdCkgfQogCisJLmdvdC5wbHQgOiB7ICooLmdvdC5wbHQpIH0KIAkuID0gQUxJR04oNCk7CisKKwkuZHluYW1pYyAoTk9MT0FEKSA6IHsgKiguZHluYW1pYykgfQorCS4gPSBBTElHTig0KTsKKwogCV9fdV9ib290X2NtZF9zdGFydCA9IC47CiAJLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KKwkuID0gQUxJR04oNCk7CiAJX191X2Jvb3RfY21kX2VuZCA9IC47CiAJX2kzODZib290X2NtZF9zdGFydCA9IExPQURBRERSKC51X2Jvb3RfY21kKTsKIAotCV9pMzg2Ym9vdF9yb21kYXRhX3NpemUgPSBTSVpFT0YoLmRhdGEpICsgU0laRU9GKC5nb3QpICsgU0laRU9GKC51X2Jvb3RfY21kKTsKKwlfaTM4NmJvb3RfcmVsX2R5bl9zdGFydCA9IC47CisJLnJlbC5keW4gOiB7ICooLnJlbC5keW4pIH0KKwlfaTM4NmJvb3RfcmVsX2R5bl9lbmQgPSAuOwogCiAJLiA9IEFMSUdOKDQpOwogCV9pMzg2Ym9vdF9ic3Nfc3RhcnQgPSBBQlNPTFVURSguKTsKQEAgLTU3LDcgKzc3LDcgQEAKIAlfaTM4NmJvb3RfYnNzX3NpemUgPSBTSVpFT0YoLmJzcyk7CiAKIAkvKiAxNmJpdCByZWFsbW9kZSB0cmFtcG9saW5lIGNvZGUgKi8KLQkucmVhbG1vZGUgMHg3YzAgOiBBVCAoIExPQURBRERSKC5nb3QpICsgU0laRU9GKC5nb3QpICsgU0laRU9GKC51X2Jvb3RfY21kKSkgeyAqKC5yZWFsbW9kZSkgfQorCS5yZWFsbW9kZSAweDdjMCA6IEFUICggTE9BREFERFIoLnJlbC5keW4pICsgU0laRU9GKC5yZWwuZHluKSApIHsgKigucmVhbG1vZGUpIH0KIAogCV9pMzg2Ym9vdF9yZWFsbW9kZSA9IExPQURBRERSKC5yZWFsbW9kZSk7CiAJX2kzODZib290X3JlYWxtb2RlX3NpemUgPSBTSVpFT0YoLnJlYWxtb2RlKTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VyaWMvTWFrZWZpbGUgYi9ib2FyZC9lcmljL01ha2VmaWxlCmluZGV4IDgxYTQ1NTIuLmMyYTY4NzIgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VyaWMvTWFrZWZpbGUKKysrIGIvYm9hcmQvZXJpYy9NYWtlZmlsZQpAQCAtMzMsNyArMzMsNyBAQAogU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQogCiAkKExJQik6CSQoT0JKUykgJChTT0JKUykKLQkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykgJChTT0JKUykKIAogY2xlYW46CiAJcm0gLWYgJChTT0JKUykgJChPQkpTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXJpYy91LWJvb3QubGRzIGIvYm9hcmQvZXJpYy91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjFjY2ZiLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2VyaWMvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAxCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL2VyaWMvaW5pdC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2tnZGIubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC90cmFwcy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2ludGVycnVwdHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC80eHhfdWFydC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCi0gICAgZHJpdmVycy9uZXQvNHh4X2VuZXQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLS8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCi0gICAgY29tbW9uL2Vudl9lbWJlZGRlZC5vKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9hZGNpb3AvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9hZGNpb3AvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIwN2ZlMC4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvYWRjaW9wL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwRkZGKSAmIDB4RkZGRkYwMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDQwOTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9hcGM0MDUvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9hcGM0MDUvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5OTI3NS4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvYXBjNDA1L3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvYXI0MDUvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9hcjQwNS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjQ3MTA5Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9hcjQwNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkJKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9hc2g0MDUvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9hc2g0MDUvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1YzkwMS4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvYXNoNDA1L3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2NhbmJ0L3UtYm9vdC5sZHMgYi9ib2FyZC9lc2QvY2FuYnQvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI0NzEwOS4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2QvY2FuYnQvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY21zNzAwL3UtYm9vdC5sZHMgYi9ib2FyZC9lc2QvY21zNzAwL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTkyNzUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL2NtczcwMC91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2NwY2kyZHAvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9jcGNpMmRwL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTkyNzUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL2NwY2kyZHAvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9jcGNpNDA1L3UtYm9vdC5sZHMgYi9ib2FyZC9lc2QvY3BjaTQwNS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk5Mjc1Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9jcGNpNDA1L3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvY3BjaWlzZXI0L3UtYm9vdC5sZHMgYi9ib2FyZC9lc2QvY3BjaWlzZXI0L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTkyNzUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL2NwY2lpc2VyNC91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL2NvbmZpZy5tayBiL2JvYXJkL2VzZC9kYXNhX3NpbS9jb25maWcubWsKaW5kZXggYWU4NTVkYy4uNGZlMzc3NCAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2Rhc2Ffc2ltL2NvbmZpZy5taworKysgYi9ib2FyZC9lc2QvZGFzYV9zaW0vY29uZmlnLm1rCkBAIC0yMSwzICsyMSw2IEBACiAjIE1BIDAyMTExLTEzMDcgVVNBCiAjCiBURVhUX0JBU0UgPSAweEZGRkMwMDAwCisKKyMgVXNlIGJvYXJkIHNwZWNpZmljIGxpbmtlciBzY3JpcHQKK0xEU0NSSVBUIDo9ICQoU1JDVFJFRSkvYm9hcmQvZXNkL2Rhc2Ffc2ltL3UtYm9vdC5sZHMKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kcDQwNS91LWJvb3QubGRzIGIvYm9hcmQvZXNkL2RwNDA1L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTkyNzUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL2RwNDA1L3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvZHU0MDUvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9kdTQwNS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWFkMmYyLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9kdTQwNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2R1NDQwL2R1NDQwLmMgYi9ib2FyZC9lc2QvZHU0NDAvZHU0NDAuYwppbmRleCBkMGU1MmNiLi4xMTFjY2U1IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvZHU0NDAvZHU0NDAuYworKysgYi9ib2FyZC9lc2QvZHU0NDAvZHU0NDAuYwpAQCAtMzYwLDE2NSArMzYwLDYgQEAKIAlyZXR1cm4gKDApOwogfQogCi0vKgotICogcGNpX3ByZV9pbml0Ci0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHJlZ2lzdGVyaW5nIHRoZSBob3NlIGFuZCBnaXZlcwotICogdGhlIGJvYXJkIHRoZSBvcHBvcnR1bml0eSB0byBjaGVjayB0aGluZ3MuIFJldHVybmluZyBhIHZhbHVlIG9mIHplcm8KLSAqIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgotICoKLSAqIERpZmZlcmVudCBib2FyZHMgbWF5IHdpc2ggdG8gY3VzdG9taXplIHRoZSBwY2kgY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqIChhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQotICogY2VydGFpbiBwcmUtaW5pdGlhbGl6YXRpb24gYWN0aW9ucy4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCS8qCi0JICogU2V0IHByaW9yaXR5IGZvciBhbGwgUExCMyBkZXZpY2VzIHRvIDAuCi0JICogU2V0IFBMQjMgYXJiaXRlciB0byBmYWlyIG1vZGUuCi0JICovCi0JbWZzZHIoU0QwX0FNUDEsIGFkZHIpOwotCW10c2RyKFNEMF9BTVAxLCAoYWRkciAmIDB4MDAwMDAwRkYpIHwgMHgwMDAwRkYwMCk7Ci0JYWRkciA9IG1mZGNyKFBMQjNfQUNSKTsKLQltdGRjcihQTEIzX0FDUiwgYWRkciB8IDB4ODAwMDAwMDApOwotCi0JLyoKLQkgKiBTZXQgcHJpb3JpdHkgZm9yIGFsbCBQTEI0IGRldmljZXMgdG8gMC4KLQkgKi8KLQltZnNkcihTRDBfQU1QMCwgYWRkcik7Ci0JbXRzZHIoU0QwX0FNUDAsIChhZGRyICYgMHgwMDAwMDBGRikgfCAweDAwMDBGRjAwKTsKLQlhZGRyID0gbWZkY3IoUExCNF9BQ1IpIHwgMHhhMDAwMDAwMDsgLyogV2FzIDB4OC0tLS0gKi8KLQltdGRjcihQTEI0X0FDUiwgYWRkcik7Ci0KLQkvKgotCSAqIFNldCBOZWJ1bGEgUExCNCBhcmJpdGVyIHRvIGZhaXIgbW9kZS4KLQkgKi8KLQkvKiBTZWdtZW50MCAqLwotCWFkZHIgPSAobWZkY3IoUExCMF9BQ1IpICYgflBMQjBfQUNSX1BQTV9NQVNLKSB8IFBMQjBfQUNSX1BQTV9GQUlSOwotCWFkZHIgPSAoYWRkciAmIH5QTEIwX0FDUl9IQlVfTUFTSykgfCBQTEIwX0FDUl9IQlVfRU5BQkxFRDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMF9BQ1JfUkRQX01BU0spIHwgUExCMF9BQ1JfUkRQXzRERUVQOwotCWFkZHIgPSAoYWRkciAmIH5QTEIwX0FDUl9XUlBfTUFTSykgfCBQTEIwX0FDUl9XUlBfMkRFRVA7Ci0JbXRkY3IoUExCMF9BQ1IsIGFkZHIpOwotCi0JLyogU2VnbWVudDEgKi8KLQlhZGRyID0gKG1mZGNyKFBMQjFfQUNSKSAmIH5QTEIxX0FDUl9QUE1fTUFTSykgfCBQTEIxX0FDUl9QUE1fRkFJUjsKLQlhZGRyID0gKGFkZHIgJiB+UExCMV9BQ1JfSEJVX01BU0spIHwgUExCMV9BQ1JfSEJVX0VOQUJMRUQ7Ci0JYWRkciA9IChhZGRyICYgflBMQjFfQUNSX1JEUF9NQVNLKSB8IFBMQjFfQUNSX1JEUF80REVFUDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMV9BQ1JfV1JQX01BU0spIHwgUExCMV9BQ1JfV1JQXzJERUVQOwotCW10ZGNyKFBMQjFfQUNSLCBhZGRyKTsKLQotCXJldHVybiAxOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KLQotLyoKLSAqIHBjaV90YXJnZXRfaW5pdAotICoKLSAqIFRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKiBpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKiBtYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyoKLQkgKiBTZXQgdXAgRGlyZWN0IE1NSU8gcmVnaXN0ZXJzCi0JICovCi0JLyoKLQkgKiBQb3dlclBDNDQwRVBYIFBDSSBNYXN0ZXIgY29uZmlndXJhdGlvbi4KLQkgKiBNYXAgb25lIDFHaWcgcmFuZ2Ugb2YgUExCL3Byb2Nlc3NvciBhZGRyZXNzZXMgdG8gUENJIG1lbW9yeSBzcGFjZS4KLQkgKiBQTEIgYWRkcmVzcyAweEEwMDAwMDAwLTB4REZGRkZGRkYKLQkgKiAgICAgPT0+IFBDSSBhZGRyZXNzIDB4QTAwMDAwMDAtMHhERkZGRkZGRgotCSAqIFVzZSBieXRlIHJldmVyc2VkIG91dCByb3V0aW5lcyB0byBoYW5kbGUgZW5kaWFuZXNzLgotCSAqIE1ha2UgdGhpcyByZWdpb24gbm9uLXByZWZldGNoYWJsZS4KLQkgKi8KLQlvdXQzMnIoUENJTDBfUE1NME1BLCAweDAwMDAwMDAwKTsJLyogUE1NMCBNYXNrL0F0dHJpYnV0ZSAqLwotCQkJCQkJLyogLSBkaXNhYmxlZCBiNCBzZXR0aW5nICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRSk7CS8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0wUENJTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UpOyAvKiBQTU0wIFBDSSBMb3cgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0wUENJSEEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NME1BLCAweEUwMDAwMDAxKTsJLyogNTEyTSArIE5vIHByZWZldGNoaW5nLCAqLwotCQkJCQkJLyogYW5kIGVuYWJsZSByZWdpb24gKi8KLQotCW91dDMycihQQ0lMMF9QTU0xTUEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIE1hc2svQXR0cmlidXRlICovCi0JCQkJCQkvKiAtIGRpc2FibGVkIGI0IHNldHRpbmcgKi8KLQlvdXQzMnIoUENJTDBfUE1NMUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFMik7IC8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0xUENJTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UyKTsgLyogUE1NMCBQQ0kgTG93IEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMVBDSUhBLCAweDAwMDAwMDAwKTsJLyogUE1NMCBQQ0kgSGlnaCBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFNQSwgMHhFMDAwMDAwMSk7CS8qIDUxMk0gKyBObyBwcmVmZXRjaGluZywgKi8KLQkJCQkJCS8qIGFuZCBlbmFibGUgcmVnaW9uICovCi0KLQlvdXQzMnIoUENJTDBfUFRNMU1TLCAweDAwMDAwMDAxKTsJLyogTWVtb3J5IFNpemUvQXR0cmlidXRlICovCi0Jb3V0MzJyKFBDSUwwX1BUTTFMQSwgMCk7CQkvKiBMb2NhbCBBZGRyLiBSZWcgKi8KLQlvdXQzMnIoUENJTDBfUFRNMk1TLCAwKTsJCS8qIE1lbW9yeSBTaXplL0F0dHJpYnV0ZSAqLwotCW91dDMycihQQ0lMMF9QVE0yTEEsIDApOwkJLyogTG9jYWwgQWRkci4gUmVnICovCi0KLQkvKgotCSAqIFNldCB1cCBDb25maWd1cmF0aW9uIHJlZ2lzdGVycwotCSAqLwotCi0JLyogUHJvZ3JhbSB0aGUgYm9hcmQncyBzdWJzeXN0ZW0gaWQvdmVuZG9yIGlkICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAotCQkJICAgICAgUENJX1ZFTkRPUl9JRF9FU0RHTUJIKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX1NVQlNZU1RFTV9JRCwgUENJX0RFVklDRV9JRF9EVTQ0MCk7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NMQVNTX1NVQl9DT0RFLCBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpOwotCi0JLyogQ29uZmlndXJlIGNvbW1hbmQgcmVnaXN0ZXIgYXMgYnVzIG1hc3RlciAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwgUENJX0NPTU1BTkRfTUFTVEVSKTsKLQotCS8qIDI0MG5TIFBDSSBjbG9jayAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfTEFURU5DWV9USU1FUiwgMSk7Ci0KLQkvKiBObyBlcnJvciByZXBvcnRpbmcgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0VSUkVOLCAwKTsKLQotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoMCwgUENJX0JSREdPUFQyLCAweDAwMDAwMTAxKTsKLQotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9NQVNURVJfSU5JVCkKLXZvaWQgcGNpX21hc3Rlcl9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wX3Nob3J0OwotCi0JLyoKLQkgKiBXcml0ZSB0aGUgUG93ZXJQQzQ0MCBFUCBQQ0kgQ29uZmlndXJhdGlvbiByZWdzLgotCSAqIEVuYWJsZSBQb3dlclBDNDQwIEVQIHRvIGJlIGEgbWFzdGVyIG9uIHRoZSBQQ0kgYnVzIChQTU0pLgotCSAqIEVuYWJsZSBQb3dlclBDNDQwIEVQIHRvIGFjdCBhcyBhIFBDSSBtZW1vcnkgdGFyZ2V0IChQVE0pLgotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCAmdGVtcF9zaG9ydCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELAotCQkJICAgICAgdGVtcF9zaG9ydCB8IFBDSV9DT01NQU5EX01BU1RFUiB8Ci0JCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkpOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9NQVNURVJfSU5JVCkgKi8KLQotLyoKLSAqIGlzX3BjaV9ob3N0Ci0gKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYSBwY2kgc2NhbiBzaG91bGQgYmUKLSAqIHBlcmZvcm1lZC4gV2l0aCB2YXJpb3VzIGhhcmR3YXJlIGVudmlyb25tZW50cyAoZXNwZWNpYWxseSBjUENJIGFuZAotICogUFBNQykgaXQncyBpbnN1ZmZpY2llbnQgdG8gZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYXJiaXRlciBlbmFibGUKLSAqIGJpdCBpbiB0aGUgc3RyYXAgcmVnaXN0ZXIsIG9yIGdlbmVyaWMgaG9zdC9hZGFwdGVyIGFzc3VtcHRpb25zLgotICoKLSAqIFJhdGhlciB0aGFuIGhhcmQtY29kZSBhIGJhZCBhc3N1bXB0aW9uIGluIHRoZSBnZW5lcmFsIDQ0MCBjb2RlLCB0aGUKLSAqIDQ0MCBwY2kgY29kZSByZXF1aXJlcyB0aGUgYm9hcmQgdG8gZGVjaWRlIGF0IHJ1bnRpbWUuCi0gKgotICogUmV0dXJuIDAgZm9yIGFkYXB0ZXIgbW9kZSwgbm9uLXplcm8gZm9yIGhvc3QgKG1vbmFyY2gpIG1vZGUuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi1pbnQgaXNfcGNpX2hvc3Qoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCS8qIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCi0JcmV0dXJuICgxKTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KIGludCBsYXN0X3N0YWdlX2luaXQodm9pZCkKIHsKIAlpbnQgZSwgaTsKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kdTQ0MC9kdTQ0MC5oIGIvYm9hcmQvZXNkL2R1NDQwL2R1NDQwLmgKaW5kZXggYTEyNGE3ZS4uMzc2OTdlYyAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL2R1NDQwL2R1NDQwLmgKKysrIGIvYm9hcmQvZXNkL2R1NDQwL2R1NDQwLmgKQEAgLTM4LDYgKzM4LDMgQEAKICNkZWZpbmUgUFdSX1JEWQkJCTB4MTAKIAogI2RlZmluZSBDUExEX0lSUQkJKDMyKzMwKQotCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfRVNER01CSAkweDEyZmUKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9EVTQ0MAkweDA0NDQKZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9kdTQ0MC91LWJvb3QubGRzIGIvYm9hcmQvZXNkL2R1NDQwL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNmMwOTYuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL2R1NDQwL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMgotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC5ib290cGcgMHhGRkZGRjAwMCA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC5ib290cGcpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotCi0gIHBwY2Vudl9hc3NlcnQgPSBBU1NFUlQoLiA8IDB4RkZGRjgwMDAsICIuYnNzIHNlY3Rpb24gdG9vIGJpZywgb3ZlcmxhcHMgLnBwY2VudiBzZWN0aW9uLiBQbGVhc2UgdXBkYXRlIHlvdXIgY29uZmd1cmF0aW9uOiBDT05GSUdfU1lTX01PTklUT1JfQkFTRSwgQ09ORklHX1NZU19NT05JVE9SX0xFTiBhbmQgVEVYVF9CQVNFIG1heSBuZWVkIHRvIGJlIG1vZGlmaWVkLiIpOwotCi0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvaGg0MDUvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9oaDQwNS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk5Mjc1Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9oaDQwNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL2h1YjQwNS91LWJvb3QubGRzIGIvYm9hcmQvZXNkL2h1YjQwNS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODVjOTAxLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9odWI0MDUvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2Qvb2NydGMvdS1ib290LmxkcyBiL2JvYXJkL2VzZC9vY3J0Yy91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDg4NGI2Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9vY3J0Yy91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC90cmFwcy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2ludGVycnVwdHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC80eHhfdWFydC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLS8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCi0vKiAgICBjb21tb24vZW52X2VtYmVkZGVkLm8oLnRleHQpKi8KLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvcGNpNDA1L3UtYm9vdC5sZHMgYi9ib2FyZC9lc2QvcGNpNDA1L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTkyNzUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL3BjaTQwNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BsdTQwNS9NYWtlZmlsZSBiL2JvYXJkL2VzZC9wbHU0MDUvTWFrZWZpbGUKaW5kZXggYzU3ZDkwYy4uOThhY2I0YiAxMDA2NDQKLS0tIGEvYm9hcmQvZXNkL3BsdTQwNS9NYWtlZmlsZQorKysgYi9ib2FyZC9lc2QvcGx1NDA1L01ha2VmaWxlCkBAIC0zMSw3ICszMSw2IEBACiBDT0JKUwk9ICQoQk9BUkQpLm8gZmxhc2gubyBcCiAJLi4vY29tbW9uL21pc2MubyBcCiAJLi4vY29tbW9uL2VzZDQwNWVwX25hbmQubyBcCi0JLi4vY29tbW9uL2F1dG9fdXBkYXRlLm8KIAogU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvcGx1NDA1L3BsdTQwNS5jIGIvYm9hcmQvZXNkL3BsdTQwNS9wbHU0MDUuYwppbmRleCBjNzMzNTg3Li5mY2ZmZGY2IDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvcGx1NDA1L3BsdTQwNS5jCisrKyBiL2JvYXJkL2VzZC9wbHU0MDUvcGx1NDA1LmMKQEAgLTQ2LDUwICs0Niw2IEBACiAgKi8KICNpbmNsdWRlICIuLi9jb21tb24vZnBnYS5jIgogCi0vKgotICogaW5jbHVkZSBjb21tb24gYXV0by11cGRhdGUgY29kZSAoZm9yIGVzZCBib2FyZHMpCi0gKi8KLSNpbmNsdWRlICIuLi9jb21tb24vYXV0b191cGRhdGUuaCIKLQotYXVfaW1hZ2VfdCBhdV9pbWFnZVtdID0gewotCXsicGx1NDA1L3ByZWluc3QuaW1nIiwgMCwgLTEsIEFVX1NDUklQVH0sCi0JeyJwbHU0MDUvdS1ib290LmltZyIsIDB4ZmZmYzAwMDAsIDB4MDAwNDAwMDAsIEFVX0ZJUk1XQVJFfSwKLQl7InBsdTQwNS9wSW1hZ2VfJHtiZF90eXBlfSIsIDB4MDAwMDAwMDAsIDB4MDAxMDAwMDAsIEFVX05BTkR9LAotCXsicGx1NDA1L3BJbWFnZS5pbml0cmQiLCAweDAwMTAwMDAwLCAweDAwMjAwMDAwLCBBVV9OQU5EfSwKLQl7InBsdTQwNS95YWZmc210Mi5pbWciLCAweDAwMzAwMDAwLCAweDAxYzAwMDAwLCBBVV9OQU5EfSwKLQl7InBsdTQwNS9wb3N0aW5zdC5pbWciLCAwLCAwLCBBVV9TQ1JJUFR9LAotfTsKLQotaW50IE5fQVVfSU1BR0VTID0gKHNpemVvZihhdV9pbWFnZSkgLyBzaXplb2YoYXVfaW1hZ2VbMF0pKTsKLQotLyoKLSAqIGdlbmVyYXRlIGEgc2hvcnQgc3Bpa2Ugb24gdGhlIENBTiB0eCBsaW5lCi0gKiB0byBicmluZyB0aGUgY291cGxlcnMgaW4gc3luYwotICovCi12b2lkIGluaXRfY291cGxlcih1MzIgYWRkcikKLXsKLQlzdHJ1Y3Qgc2phMTAwMF9iYXNpY19zICpjdHJsID0gKHN0cnVjdCBzamExMDAwX2Jhc2ljX3MgKilhZGRyOwotCi0JLyogcmVzZXQgKi8KLQlvdXRfOCgmY3RybC0+Y3IsIENSX1JSKTsKLQotCS8qIGRvbWluYW50ICovCi0Jb3V0XzgoJmN0cmwtPmJ0cjAsIDB4MDApOyAvKiBidHIgc2V0dXAgaXMgcmVxdWlyZWQgKi8KLQlvdXRfOCgmY3RybC0+YnRyMSwgMHgxNCk7IC8qIHdlIHVzZSAxTWJpdC9zICovCi0Jb3V0XzgoJmN0cmwtPm9jLCBPQ19UUDEgfCBPQ19UTjEgfCBPQ19QT0wxIHwKLQkgICAgICBPQ19UUDAgfCBPQ19UTjAgfCBPQ19QT0wwIHwgT0NfTU9ERTEpOwotCW91dF84KCZjdHJsLT5jciwgMHgwMCk7Ci0KLQkvKiBkZWxheSAqLwotCWluXzgoJmN0cmwtPmNyKTsKLQlpbl84KCZjdHJsLT5jcik7Ci0JaW5fOCgmY3RybC0+Y3IpOwotCWluXzgoJmN0cmwtPmNyKTsKLQotCS8qIHJlc2V0ICovCi0Jb3V0XzgoJmN0cmwtPmNyLCBDUl9SUik7Ci19Ci0KIC8qIFByb3RvdHlwZXMgKi8KIGludCBndW56aXAodm9pZCAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BsdTQwNS91LWJvb3QubGRzIGIvYm9hcmQvZXNkL3BsdTQwNS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODVjOTAxLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9wbHU0MDUvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvcG1jNDA1L3UtYm9vdC5sZHMgYi9ib2FyZC9lc2QvcG1jNDA1L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3OGE3NTUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL3BtYzQwNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC9wbWM0MDVkZS91LWJvb3QubGRzIGIvYm9hcmQvZXNkL3BtYzQwNWRlL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTkyNzUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL3BtYzQwNWRlL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvcG1jNDQwL2NvbmZpZy5tayBiL2JvYXJkL2VzZC9wbWM0NDAvY29uZmlnLm1rCmluZGV4IDBjNGQ1ODIuLjkxZTY1ZWMgMTAwNjQ0Ci0tLSBhL2JvYXJkL2VzZC9wbWM0NDAvY29uZmlnLm1rCisrKyBiL2JvYXJkL2VzZC9wbWM0NDAvY29uZmlnLm1rCkBAIC0yMCwxMCArMjAsNiBAQAogIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogIyBNQSAwMjExMS0xMzA3IFVTQQogIwotIwotIyBBTUNDIDQ0MEVQeCBSZWZlcmVuY2UgUGxhdGZvcm0gKFNlcXVvaWEpIGJvYXJkCi0jCi0KIHNpbmNsdWRlICQoT0JKVFJFRSkvYm9hcmQvJChCT0FSRERJUikvY29uZmlnLnRtcAogCiBpZm5kZWYgVEVYVF9CQVNFCmRpZmYgLS1naXQgYS9ib2FyZC9lc2QvcG1jNDQwL3BtYzQ0MC5jIGIvYm9hcmQvZXNkL3BtYzQ0MC9wbWM0NDAuYwppbmRleCBlYzkyNTUyLi5iZDQzYTlhIDEwMDY0NAotLS0gYS9ib2FyZC9lc2QvcG1jNDQwL3BtYzQ0MC5jCisrKyBiL2JvYXJkL2VzZC9wbWM0NDAvcG1jNDQwLmMKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlIDxtaWlwaHkuaD4KICNlbmRpZgogI2luY2x1ZGUgPHNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS80eHhfcGNpLmg+CisKICNpbmNsdWRlICJmcGdhLmgiCiAjaW5jbHVkZSAicG1jNDQwLmgiCiAKQEAgLTQ3OCw3ICs0ODAsNyBAQAogLyoKICAqIEFzc2lnbiBpbnRlcnJ1cHRzIHRvIFBDSSBkZXZpY2VzLiBTb21lIE9TcyByZWx5IG9uIHRoaXMuCiAgKi8KLXZvaWQgcG1jNDQwX3BjaV9maXh1cF9pcnEoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBwY2lfZGV2X3QgZGV2KQordm9pZCBib2FyZF9wY2lfZml4dXBfaXJxKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgcGNpX2Rldl90IGRldikKIHsKIAl1bnNpZ25lZCBjaGFyIGludF9saW5lW10gPSB7SVJRX1BDSUMsIElSUV9QQ0lELCBJUlFfUENJQSwgSVJRX1BDSUJ9OwogCkBAIC00ODcsNjQgKzQ4OSw2IEBACiB9CiAjZW5kaWYKIAotLyoKLSAqIHBjaV9wcmVfaW5pdAotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKLSAqIHRoZSBib2FyZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hlY2sgdGhpbmdzLiBSZXR1cm5pbmcgYSB2YWx1ZSBvZiB6ZXJvCi0gKiBpbmRpY2F0ZXMgdGhhdCB0aGluZ3MgYXJlIGJhZCAmIFBDSSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgYWJvcnRlZC4KLSAqCi0gKiBEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCi0gKiAoYWRkIHJlZ2lvbnMsIG92ZXJyaWRlIGRlZmF1bHQgYWNjZXNzIHJvdXRpbmVzLCBldGMpIG9yIHBlcmZvcm0KLSAqIGNlcnRhaW4gcHJlLWluaXRpYWxpemF0aW9uIGFjdGlvbnMuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi1pbnQgcGNpX3ByZV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQkvKgotCSAqIFNldCBwcmlvcml0eSBmb3IgYWxsIFBMQjMgZGV2aWNlcyB0byAwLgotCSAqIFNldCBQTEIzIGFyYml0ZXIgdG8gZmFpciBtb2RlLgotCSAqLwotCW1mc2RyKFNEMF9BTVAxLCBhZGRyKTsKLQltdHNkcihTRDBfQU1QMSwgKGFkZHIgJiAweDAwMDAwMEZGKSB8IDB4MDAwMEZGMDApOwotCWFkZHIgPSBtZmRjcihQTEIzX0FDUik7Ci0JbXRkY3IoUExCM19BQ1IsIGFkZHIgfCAweDgwMDAwMDAwKTsKLQotCS8qCi0JICogU2V0IHByaW9yaXR5IGZvciBhbGwgUExCNCBkZXZpY2VzIHRvIDAuCi0JICovCi0JbWZzZHIoU0QwX0FNUDAsIGFkZHIpOwotCW10c2RyKFNEMF9BTVAwLCAoYWRkciAmIDB4MDAwMDAwRkYpIHwgMHgwMDAwRkYwMCk7Ci0JYWRkciA9IG1mZGNyKFBMQjRfQUNSKSB8IDB4YTAwMDAwMDA7CS8qIFdhcyAweDgtLS0tICovCi0JbXRkY3IoUExCNF9BQ1IsIGFkZHIpOwotCi0JLyoKLQkgKiBTZXQgTmVidWxhIFBMQjQgYXJiaXRlciB0byBmYWlyIG1vZGUuCi0JICovCi0JLyogU2VnbWVudDAgKi8KLQlhZGRyID0gKG1mZGNyKFBMQjBfQUNSKSAmIH5QTEIwX0FDUl9QUE1fTUFTSykgfCBQTEIwX0FDUl9QUE1fRkFJUjsKLQlhZGRyID0gKGFkZHIgJiB+UExCMF9BQ1JfSEJVX01BU0spIHwgUExCMF9BQ1JfSEJVX0VOQUJMRUQ7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX1JEUF9NQVNLKSB8IFBMQjBfQUNSX1JEUF80REVFUDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMF9BQ1JfV1JQX01BU0spIHwgUExCMF9BQ1JfV1JQXzJERUVQOwotCW10ZGNyKFBMQjBfQUNSLCBhZGRyKTsKLQotCS8qIFNlZ21lbnQxICovCi0JYWRkciA9IChtZmRjcihQTEIxX0FDUikgJiB+UExCMV9BQ1JfUFBNX01BU0spIHwgUExCMV9BQ1JfUFBNX0ZBSVI7Ci0JYWRkciA9IChhZGRyICYgflBMQjFfQUNSX0hCVV9NQVNLKSB8IFBMQjFfQUNSX0hCVV9FTkFCTEVEOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9SRFBfTUFTSykgfCBQTEIxX0FDUl9SRFBfNERFRVA7Ci0JYWRkciA9IChhZGRyICYgflBMQjFfQUNSX1dSUF9NQVNLKSB8IFBMQjFfQUNSX1dSUF8yREVFUDsKLQltdGRjcihQTEIxX0FDUiwgYWRkcik7Ci0KLSNpZmRlZiBDT05GSUdfUENJX1BOUAotCWhvc2UtPmZpeHVwX2lycSA9IHBtYzQ0MF9wY2lfZml4dXBfaXJxOwotI2VuZGlmCi0KLQlyZXR1cm4gMTsKLX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KIC8qCiAgKiBwY2lfdGFyZ2V0X2luaXQKICAqCkBAIC02NTgsMjQgKzYwMiwxNiBAQAogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KIAogLyoKLSAqIHBjaV9tYXN0ZXJfaW5pdAorICogT3ZlcnJpZGUgd2VhayBkZWZhdWx0IHBjaV9tYXN0ZXJfaW5pdCgpCiAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfTUFTVEVSX0lOSVQpCiB2b2lkIHBjaV9tYXN0ZXJfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCiB7Ci0JdW5zaWduZWQgc2hvcnQgdGVtcF9zaG9ydDsKLQogCS8qCi0JICogV3JpdGUgdGhlIFBvd2VyUEM0NDAgRVAgUENJIENvbmZpZ3VyYXRpb24gcmVncy4KLQkgKiBFbmFibGUgUG93ZXJQQzQ0MCBFUCB0byBiZSBhIG1hc3RlciBvbiB0aGUgUENJIGJ1cyAoUE1NKS4KLQkgKiBFbmFibGUgUG93ZXJQQzQ0MCBFUCB0byBhY3QgYXMgYSBQQ0kgbWVtb3J5IHRhcmdldCAoUFRNKS4KKwkgKiBPbmx5IGNvbmZpZ3VyZSB0aGUgbWFzdGVyIGluIG1vbmFjaCBtb2RlCiAJICovCi0JaWYgKGlzX21vbmFyY2goKSkgewotCQlwY2lfcmVhZF9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwgJnRlbXBfc2hvcnQpOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsCi0JCQkJICAgICAgdGVtcF9zaG9ydCB8IFBDSV9DT01NQU5EX01BU1RFUiB8Ci0JCQkJICAgICAgUENJX0NPTU1BTkRfTUVNT1JZKTsKLQl9CisJaWYgKGlzX21vbmFyY2goKSkKKwkJX19wY2lfbWFzdGVyX2luaXQoaG9zZSk7CiB9CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUKSAqLwogCkBAIC03MTIsNyArNjQ4LDcgQEAKIH0KIAogLyoKLSAqIGlzX3BjaV9ob3N0CisgKiBPdmVycmlkZSB3ZWFrIGlzX3BjaV9ob3N0KCkKICAqCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHBjaSBzY2FuIHNob3VsZCBiZQogICogcGVyZm9ybWVkLiBXaXRoIHZhcmlvdXMgaGFyZHdhcmUgZW52aXJvbm1lbnRzIChlc3BlY2lhbGx5IGNQQ0kgYW5kCkBAIC03NDEsMTcgKzY3Nyw2IEBACiB9CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfUE9TVCkKLS8qCi0gKiBSZXR1cm5zIDEgaWYga2V5cyBwcmVzc2VkIHRvIHN0YXJ0IHRoZSBwb3dlci1vbiBsb25nLXJ1bm5pbmcgdGVzdHMKLSAqIENhbGxlZCBmcm9tIGJvYXJkX2luaXRfZigpLgotICovCi1pbnQgcG9zdF9ob3RrZXlzX3ByZXNzZWQodm9pZCkKLXsKLQlyZXR1cm4gMDsJLyogTm8gaG90a2V5cyBzdXBwb3J0ZWQgKi8KLX0KLSNlbmRpZiAvKiBDT05GSUdfUE9TVCAqLwotCiAjaWZkZWYgQ09ORklHX1JFU0VUX1BIWV9SCiB2b2lkIHJlc2V0X3BoeSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3BtYzQ0MC91LWJvb3QubGRzIGIvYm9hcmQvZXNkL3BtYzQ0MC91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjZjMDk2Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC9wbWM0NDAvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0KLSAgcHBjZW52X2Fzc2VydCA9IEFTU0VSVCguIDwgMHhGRkZGODAwMCwgIi5ic3Mgc2VjdGlvbiB0b28gYmlnLCBvdmVybGFwcyAucHBjZW52IHNlY3Rpb24uIFBsZWFzZSB1cGRhdGUgeW91ciBjb25mZ3VyYXRpb246IENPTkZJR19TWVNfTU9OSVRPUl9CQVNFLCBDT05GSUdfU1lTX01PTklUT1JfTEVOIGFuZCBURVhUX0JBU0UgbWF5IG5lZWQgdG8gYmUgbW9kaWZpZWQuIik7Ci0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2VzZC92b2g0MDUvdS1ib290LmxkcyBiL2JvYXJkL2VzZC92b2g0MDUvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5OTI3NS4uMDAwMDAwMAotLS0gYS9ib2FyZC9lc2Qvdm9oNDA1L3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9lc2Qvdm9tNDA1L3UtYm9vdC5sZHMgYi9ib2FyZC9lc2Qvdm9tNDA1L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTkyNzUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZXNkL3ZvbTQwNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZXNkL3d1aDQwNS91LWJvb3QubGRzIGIvYm9hcmQvZXNkL3d1aDQwNS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODVjOTAxLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2VzZC93dWg0MDUvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9leGJpdGdlbi91LWJvb3QubGRzIGIvYm9hcmQvZXhiaXRnZW4vdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiMjhlMS4uMDAwMDAwMAotLS0gYS9ib2FyZC9leGJpdGdlbi91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvZXhiaXRnZW4vaW5pdC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2tnZGIubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC90cmFwcy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2ludGVycnVwdHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC80eHhfdWFydC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLS8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCi0gICAgY29tbW9uL2Vudl9lbWJlZGRlZC5vKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgLiA9IEFMSUdOKDQpOwotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2ZhcmFkYXkvYTMyMGV2Yi9NYWtlZmlsZSBiL2JvYXJkL2ZhcmFkYXkvYTMyMGV2Yi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGY2NjBkCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvZmFyYWRheS9hMzIwZXZiL01ha2VmaWxlCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAwLTIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gYTMyMGV2Yi5vCitTT0JKUwk6PSBsb3dsZXZlbF9pbml0Lm8KKworU1JDUwk6PSAkKFNPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCisKKyQoTElCKToJJChvYmopLmRlcGVuZCAkKE9CSlMpICQoU09CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCisKK2NsZWFuOgorCXJtIC1mICQoU09CSlMpICQoT0JKUykKKworZGlzdGNsZWFuOgljbGVhbgorCXJtIC1mICQoTElCKSBjb3JlICouYmFrICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGRlZmluZXMgJChvYmopLmRlcGVuZCB0YXJnZXQKK2luY2x1ZGUgJChTUkNUUkVFKS9ydWxlcy5taworCitzaW5jbHVkZSAkKG9iaikuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2JvYXJkL2ZhcmFkYXkvYTMyMGV2Yi9hMzIwZXZiLmMgYi9ib2FyZC9mYXJhZGF5L2EzMjBldmIvYTMyMGV2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YjExYjkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9mYXJhZGF5L2EzMjBldmIvYTMyMGV2Yi5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgRmFyYWRheSBUZWNobm9sb2d5CisgKiBQby1ZdSBDaHVhbmcgPHJhdGJlcnRAZmFyYWRheS10ZWNoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8bmV0ZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9mdHNtYzAyMC5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgcGxhdGZvcm0gZGVwZW5kZW50IGluaXRpYWxpc2F0aW9ucworICovCisKK2ludCBib2FyZF9pbml0KHZvaWQpCit7CisJZ2QtPmJkLT5iaV9hcmNoX251bWJlciA9IE1BQ0hfVFlQRV9GQVJBREFZOworCWdkLT5iZC0+YmlfYm9vdF9wYXJhbXMgPSBQSFlTX1NEUkFNXzEgKyAweDEwMDsKKworCWZ0c21jMDIwX2luaXQoKTsJLyogaW5pdGlhbGl6ZSBGbGFzaCAqLworCXJldHVybiAwOworfQorCitpbnQgZHJhbV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzZHJhbV9iYXNlID0gUEhZU19TRFJBTV8xOworCXVuc2lnbmVkIGxvbmcgZXhwZWN0ZWRfc2l6ZSA9IFBIWVNfU0RSQU1fMV9TSVpFOworCXVuc2lnbmVkIGxvbmcgYWN0dWFsX3NpemU7CisKKwlhY3R1YWxfc2l6ZSA9IGdldF9yYW1fc2l6ZSgodm9pZCAqKXNkcmFtX2Jhc2UsIGV4cGVjdGVkX3NpemUpOworCisJZ2QtPmJkLT5iaV9kcmFtWzBdLnN0YXJ0ID0gc2RyYW1fYmFzZTsKKwlnZC0+YmQtPmJpX2RyYW1bMF0uc2l6ZSAgPSBhY3R1YWxfc2l6ZTsKKworCWlmIChleHBlY3RlZF9zaXplICE9IGFjdHVhbF9zaXplKQorCQlwcmludGYoIldhcm5pbmc6IE9ubHkgJWx1IG9mICVsdSBNaUIgU0RSQU0gaXMgd29ya2luZ1xuIiwKKwkJCQlhY3R1YWxfc2l6ZSA+PiAyMCwgZXhwZWN0ZWRfc2l6ZSA+PiAyMCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJkKQoreworCXJldHVybiBmdG1hYzEwMF9pbml0aWFsaXplKGJkKTsKK30KKwordWxvbmcgYm9hcmRfZmxhc2hfZ2V0X2xlZ2FjeSh1bG9uZyBiYXNlLCBpbnQgYmFua251bSwgZmxhc2hfaW5mb190ICppbmZvKQoreworCWlmIChiYW5rbnVtID09IDApIHsJLyogbm9uLUNGSSBib290IGZsYXNoICovCisJCWluZm8tPnBvcnR3aWR0aCA9IEZMQVNIX0NGSV84QklUOworCQlpbmZvLT5jaGlwd2lkdGggPSBGTEFTSF9DRklfQlk4OworCQlpbmZvLT5pbnRlcmZhY2UgPSBGTEFTSF9DRklfWDg7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2ZhcmFkYXkvYTMyMGV2Yi9jb25maWcubWsgYi9ib2FyZC9mYXJhZGF5L2EzMjBldmIvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMjViOTgKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9mYXJhZGF5L2EzMjBldmIvY29uZmlnLm1rCkBAIC0wLDAgKzEsMzUgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA5IEZhcmFkYXkgVGVjaG5vbG9neQorIyBQby1ZdSBDaHVhbmcgPHJhdGJlcnRAZmFyYWRheS10ZWNoLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIyBGYXJhZGF5IEEzMjAgYm9hcmQgd2l0aCBGQTUyNi9GQTYyNlRFL0FSTTkyNkVKLVMgY3B1cworIworIyBzZWUgaHR0cDovL3d3dy5mYXJhZGF5LXRlY2guY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbgorCisjIEEzMjAgaGFzIDEgYmFuayBvZiA2NCBNQiBEUkFNCisjCisjIDEwMDAnMDAwMCB0byAxNDAwJzAwMDAKKyMKKyMgTGludXgtS2VybmVsIGlzIGV4cGVjdGVkIHRvIGJlIGF0IDEwMDAnODAwMCwgZW50cnkgMTAwMCc4MDAwCisjCisjIHdlIGxvYWQgb3Vyc2VsZiB0byAxM2Y4JzAwMDAKKyMKKyMgZG93bmxvYWQgYXJlYSBpcyAxMjAwJzAwMDAKKworVEVYVF9CQVNFID0gMHgxM2Y4MDAwMApkaWZmIC0tZ2l0IGEvYm9hcmQvZmFyYWRheS9hMzIwZXZiL2xvd2xldmVsX2luaXQuUyBiL2JvYXJkL2ZhcmFkYXkvYTMyMGV2Yi9sb3dsZXZlbF9pbml0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3MThjMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2ZhcmFkYXkvYTMyMGV2Yi9sb3dsZXZlbF9pbml0LlMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgRmFyYWRheSBUZWNobm9sb2d5CisgKiBQby1ZdSBDaHVhbmcgPHJhdGJlcnRAZmFyYWRheS10ZWNoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorCisjaW5jbHVkZSA8YXNtL21hY3JvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZnRzZG1jMDIwLmg+CisKKy8qCisgKiBwYXJhbWV0ZXJzIGZvciB0aGUgU0RSQU0gY29udHJvbGxlcgorICovCisjZGVmaW5lIFRQMF9BCQkoQ09ORklHX0ZUU0RNQzAyMF9CQVNFICsgRlRTRE1DMDIwX09GRlNFVF9UUDApCisjZGVmaW5lIFRQMV9BCQkoQ09ORklHX0ZUU0RNQzAyMF9CQVNFICsgRlRTRE1DMDIwX09GRlNFVF9UUDEpCisjZGVmaW5lIENSX0EJCShDT05GSUdfRlRTRE1DMDIwX0JBU0UgKyBGVFNETUMwMjBfT0ZGU0VUX0NSKQorI2RlZmluZSBCMF9CU1JfQQkoQ09ORklHX0ZUU0RNQzAyMF9CQVNFICsgRlRTRE1DMDIwX09GRlNFVF9CQU5LMF9CU1IpCisjZGVmaW5lIEFDUl9BCQkoQ09ORklHX0ZUU0RNQzAyMF9CQVNFICsgRlRTRE1DMDIwX09GRlNFVF9BQ1IpCisKKyNkZWZpbmUgVFAwX0QJCUNPTkZJR19TWVNfRlRTRE1DMDIwX1RQMAorI2RlZmluZSBUUDFfRAkJQ09ORklHX1NZU19GVFNETUMwMjBfVFAxCisjZGVmaW5lIENSX0QxCQlGVFNETUMwMjBfQ1JfSVBSRUMKKyNkZWZpbmUgQ1JfRDIJCUZUU0RNQzAyMF9DUl9JU01SCisjZGVmaW5lIENSX0QzCQlGVFNETUMwMjBfQ1JfSVJFRgorCisjZGVmaW5lIEIwX0JTUl9ECShDT05GSUdfU1lTX0ZUU0RNQzAyMF9CQU5LMF9CU1IgfCBcCisJCQlGVFNETUMwMjBfQkFOS19CQVNFKFBIWVNfU0RSQU1fMSkpCisjZGVmaW5lIEFDUl9ECQlGVFNETUMwMjBfQUNSX1RPQygweDE4KQorCisvKgorICogbnVtZXJpYyA3IHNlZ21lbnQgZGlzcGxheQorICovCisubWFjcm8JbGVkLCBudW0KKwl3cml0ZTMyCUNPTkZJR19ERUJVR19MRUQsIFxudW0KKy5lbmRtCisKKy8qCisgKiBXYWl0aW5nIGZvciBTRFJBTSB0byBzZXQgdXAKKyAqLworLm1hY3JvCXdhaXRfc2RyYW0KKwlsZHIJcjAsID1DT05GSUdfRlRTRE1DMDIwX0JBU0UKKzE6CisJbGRyCXIxLCBbcjAsICNGVFNETUMwMjBfT0ZGU0VUX0NSXQorCWNtcAlyMSwgIzAKKwlibmUJMWIKKy5lbmRtCisKKy5nbG9ibCBsb3dsZXZlbF9pbml0Citsb3dsZXZlbF9pbml0OgorCW1vdglyMTEsIGxyCisKKwlsZWQJMHgwCisKKwlibAlpbml0X3NkbWMKKworCWxlZAkweDEKKworCS8qIGV2ZXJ5dGhpbmcgaXMgZmluZSBub3cgKi8KKwltb3YJbHIsIHIxMQorCW1vdglwYywgbHIKKworLyoKKyAqIG1lbW9yeSBpbml0aWFsaXphdGlvbgorICovCitpbml0X3NkbWM6CisJbGVkCTB4MTAKKworCS8qIHNldCBTRFJBTSByZWdpc3RlciAqLworCisJd3JpdGUzMglUUDBfQSwgVFAwX0QKKwlsZWQJMHgxMQorCisJd3JpdGUzMglUUDFfQSwgVFAxX0QKKwlsZWQJMHgxMgorCisJLyogc2V0IHRvIHByZWNoYXJnZSAqLworCXdyaXRlMzIJQ1JfQSwgQ1JfRDEKKwlsZWQJMHgxMworCisJd2FpdF9zZHJhbQorCWxlZAkweDE0CisKKwkvKiBzZXQgbW9kZSByZWdpc3RlciAqLworCXdyaXRlMzIJQ1JfQSwgQ1JfRDIKKwlsZWQJMHgxNQorCisJd2FpdF9zZHJhbQorCWxlZAkweDE2CisKKwkvKiBzZXQgdG8gcmVmcmVzaCAqLworCXdyaXRlMzIJQ1JfQSwgQ1JfRDMKKwlsZWQJMHgxNworCisJd2FpdF9zZHJhbQorCWxlZAkweDE4CisKKwl3cml0ZTMyCUIwX0JTUl9BLCBCMF9CU1JfRAorCWxlZAkweDE5CisKKwl3cml0ZTMyCUFDUl9BLCBBQ1JfRAorCWxlZAkweDFhCisKKwltb3YJcGMsIGxyCmRpZmYgLS1naXQgYS9ib2FyZC9mcmVlc2NhbGUvbXBjODMxM2VyZGIvc2RyYW0uYyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4MzEzZXJkYi9zZHJhbS5jCmluZGV4IGNiMTM4MjkuLjBjNGZkNjggMTAwNjQ0Ci0tLSBhL2JvYXJkL2ZyZWVzY2FsZS9tcGM4MzEzZXJkYi9zZHJhbS5jCisrKyBiL2JvYXJkL2ZyZWVzY2FsZS9tcGM4MzEzZXJkYi9zZHJhbS5jCkBAIC03Miw3ICs3Miw3IEBACiAJICogRXJyYXR1bSBERFIzIHJlcXVpcmVzIGEgNTBtcyBkZWxheSBhZnRlciBjbGVhcmluZyBERFJDRFJbRERSX2NmZ10sCiAJICogb3IgdGhlIEREUjIgY29udHJvbGxlciBtYXkgZmFpbCB0byBpbml0aWFsaXplIGNvcnJlY3RseS4KIAkgKi8KLQl1ZGVsYXkoNTAwMDApOworCV9fdWRlbGF5KDUwMDAwKTsKIAogCWltLT5kZHIuY3NibmRzWzBdLmNzYm5kcyA9IChtc2l6ZSAtIDEpID4+IDI0OwogCWltLT5kZHIuY3NfY29uZmlnWzBdID0gQ09ORklHX1NZU19ERFJfQ09ORklHOwpkaWZmIC0tZ2l0IGEvYm9hcmQvZzIwMDAvdS1ib290LmxkcyBiL2JvYXJkL2cyMDAwL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTkyNzUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZzIwMDAvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2dkc3lzL2RsdmlzaW9uL3UtYm9vdC5sZHMgYi9ib2FyZC9nZHN5cy9kbHZpc2lvbi91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODljODA4Li4wMDAwMDAwCi0tLSBhL2JvYXJkL2dkc3lzL2RsdmlzaW9uL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLnJvZGF0YSkKLSAgICAqKC5yb2RhdGExKQotICAgICooLnJvZGF0YS5zdHIxLjQpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZ2RzeXMvZ2RwcGM0NDBldHgvZ2RwcGM0NDBldHguYyBiL2JvYXJkL2dkc3lzL2dkcHBjNDQwZXR4L2dkcHBjNDQwZXR4LmMKaW5kZXggOTBkYmU1Mi4uZWNiYzNjMyAxMDA2NDQKLS0tIGEvYm9hcmQvZ2RzeXMvZ2RwcGM0NDBldHgvZ2RwcGM0NDBldHguYworKysgYi9ib2FyZC9nZHN5cy9nZHBwYzQ0MGV0eC9nZHBwYzQ0MGV0eC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8cHBjNHh4Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS80eHhfcGNpLmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCkBAIC0xNTgsMTY2ICsxNTksMTggQEAKIH0KIAogLyoKLSAqIHBjaV9wcmVfaW5pdAotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKLSAqIHRoZSBib2FyZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hlY2sgdGhpbmdzLiBSZXR1cm5pbmcgYSB2YWx1ZSBvZiB6ZXJvCi0gKiBpbmRpY2F0ZXMgdGhhdCB0aGluZ3MgYXJlIGJhZCAmIFBDSSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgYWJvcnRlZC4KLSAqCi0gKglEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCi0gKgkoYWRkIHJlZ2lvbnMsIG92ZXJyaWRlIGRlZmF1bHQgYWNjZXNzIHJvdXRpbmVzLCBldGMpIG9yIHBlcmZvcm0KLSAqCWNlcnRhaW4gcHJlLWluaXRpYWxpemF0aW9uIGFjdGlvbnMuCi0gKgorICogT3ZlcnJpZGUgd2VhayBwY2lfcHJlX2luaXQoKQogICovCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogaW50IHBjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCi0JLyoKLQkgKiBTZXQgcHJpb3JpdHkgZm9yIGFsbCBQTEIzIGRldmljZXMgdG8gMC4KLQkgKiBTZXQgUExCMyBhcmJpdGVyIHRvIGZhaXIgbW9kZS4KLQkgKi8KLQltZnNkcihTRDBfQU1QMSwgYWRkcik7Ci0JbXRzZHIoU0QwX0FNUDEsIChhZGRyICYgMHgwMDAwMDBGRikgfCAweDAwMDBGRjAwKTsKLQlhZGRyID0gbWZkY3IoUExCM19BQ1IpOwotCW10ZGNyKFBMQjNfQUNSLCBhZGRyIHwgMHg4MDAwMDAwMCk7Ci0KLQkvKgotCSAqIFNldCBwcmlvcml0eSBmb3IgYWxsIFBMQjQgZGV2aWNlcyB0byAwLgotCSAqLwotCW1mc2RyKFNEMF9BTVAwLCBhZGRyKTsKLQltdHNkcihTRDBfQU1QMCwgKGFkZHIgJiAweDAwMDAwMEZGKSB8IDB4MDAwMEZGMDApOwotCWFkZHIgPSBtZmRjcihQTEI0X0FDUikgfCAweGEwMDAwMDAwOwkvKiBXYXMgMHg4LS0tLSAqLwotCW10ZGNyKFBMQjRfQUNSLCBhZGRyKTsKLQotCS8qCi0JICogU2V0IE5lYnVsYSBQTEI0IGFyYml0ZXIgdG8gZmFpciBtb2RlLgotCSAqLwotCS8qIFNlZ21lbnQwICovCi0JYWRkciA9IChtZmRjcihQTEIwX0FDUikgJiB+UExCMF9BQ1JfUFBNX01BU0spIHwgUExCMF9BQ1JfUFBNX0ZBSVI7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX0hCVV9NQVNLKSB8IFBMQjBfQUNSX0hCVV9FTkFCTEVEOwotCWFkZHIgPSAoYWRkciAmIH5QTEIwX0FDUl9SRFBfTUFTSykgfCBQTEIwX0FDUl9SRFBfNERFRVA7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX1dSUF9NQVNLKSB8IFBMQjBfQUNSX1dSUF8yREVFUDsKLQltdGRjcihQTEIwX0FDUiwgYWRkcik7Ci0KLQkvKiBTZWdtZW50MSAqLwotCWFkZHIgPSAobWZkY3IoUExCMV9BQ1IpICYgflBMQjFfQUNSX1BQTV9NQVNLKSB8IFBMQjFfQUNSX1BQTV9GQUlSOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9IQlVfTUFTSykgfCBQTEIxX0FDUl9IQlVfRU5BQkxFRDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMV9BQ1JfUkRQX01BU0spIHwgUExCMV9BQ1JfUkRQXzRERUVQOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9XUlBfTUFTSykgfCBQTEIxX0FDUl9XUlBfMkRFRVA7Ci0JbXRkY3IoUExCMV9BQ1IsIGFkZHIpOworCS8qIEZpcnN0IGNhbGwgY29tbW9uIGNvZGUgKi8KKwlfX3BjaV9wcmVfaW5pdChob3NlKTsKIAogCS8qIGVuYWJsZSA2NiBNSHogZXh0LiBDbG9jayAqLwogCW91dDMyKEdQSU8xX1RDUiwgaW4zMihHUElPMV9UQ1IpIHwgMHgwMDAwODAwMCk7CiAJb3V0MzIoR1BJTzFfT1IsIGluMzIoR1BJTzFfT1IpIHwgMHgwMDAwODAwMCk7CiAKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCi0KLS8qCi0gKiBwY2lfdGFyZ2V0X2luaXQKLSAqCi0gKiBUaGUgYm9vdHN0cmFwIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBjaQotICogaW5ib3VuZCBtYXAgKFBJTSkuIEJ1dCB0aGUgYm9vdHN0cmFwIGNvbmZpZyBjaG9pY2VzIGFyZSBsaW1pdGVkIGFuZAotICogbWF5IG5vdCBiZSBzdWZmaWNpZW50IGZvciBhIGdpdmVuIGJvYXJkLgotICoKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkKLXZvaWQgcGNpX3RhcmdldF9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQkvKgotCSAqIFNldCB1cCBEaXJlY3QgTU1JTyByZWdpc3RlcnMKLQkgKi8KLQotCS8qCi0JICogUG93ZXJQQzQ0MCBFUCBQQ0kgTWFzdGVyIGNvbmZpZ3VyYXRpb24uCi0JICogTWFwIG9uZSAxR2lnIHJhbmdlIG9mIFBMQi9wcm9jZXNzb3IgYWRkcmVzc2VzIHRvIFBDSSBtZW1vcnkgc3BhY2UuCi0JICogICAgICAgUExCIGFkZHJlc3MgMHhBMDAwMDAwMC0weERGRkZGRkZGCi0JICogICA9PT4gUENJIGFkZHJlc3MgMHhBMDAwMDAwMC0weERGRkZGRkZGCi0JICogICBVc2UgYnl0ZSByZXZlcnNlZCBvdXQgcm91dGluZXMgdG8gaGFuZGxlIGVuZGlhbmVzcy4KLQkgKiBNYWtlIHRoaXMgcmVnaW9uIG5vbi1wcmVmZXRjaGFibGUuCi0JICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBNQSwgMHgwMDAwMDAwMCk7IAkvKiBkaXNhYmxlZCBiNCBzZXR0aW5nICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRSk7Ci0Jb3V0MzJyKFBDSUwwX1BNTTBQQ0lMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRSk7Ci0Jb3V0MzJyKFBDSUwwX1BNTTBQQ0lIQSwgMHgwMDAwMDAwMCk7Ci0Jb3V0MzJyKFBDSUwwX1BNTTBNQSwgMHhFMDAwMDAwMSk7IC8qIDUxMk0sIG5vIHByZWZldGNoLCBlbmFibGUgcmVnaW9uICovCi0KLQlvdXQzMnIoUENJTDBfUE1NMU1BLCAweDAwMDAwMDAwKTsJLyogZGlzYWJsZWQgYjQgc2V0dGluZyAqLwotCW91dDMycihQQ0lMMF9QTU0xTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UyKTsKLQlvdXQzMnIoUENJTDBfUE1NMVBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFMik7Ci0Jb3V0MzJyKFBDSUwwX1BNTTFQQ0lIQSwgMHgwMDAwMDAwMCk7Ci0Jb3V0MzJyKFBDSUwwX1BNTTFNQSwgMHhFMDAwMDAwMSk7IC8qIDUxMk0sIG5vIHByZWZldGNoLCBlbmFibGUgcmVnaW9uICovCi0KLQlvdXQzMnIoUENJTDBfUFRNMU1TLCAweDAwMDAwMDAxKTsKLQlvdXQzMnIoUENJTDBfUFRNMUxBLCAwKTsKLQlvdXQzMnIoUENJTDBfUFRNMk1TLCAwKTsKLQlvdXQzMnIoUENJTDBfUFRNMkxBLCAwKTsKLQotCS8qCi0JICogU2V0IHVwIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCi0JICovCi0KLQkvKiBQcm9ncmFtIHRoZSBib2FyZCdzIHN1YnN5c3RlbSBpZC92ZW5kb3IgaWQgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsCi0JCQkgICAgICBDT05GSUdfU1lTX1BDSV9TVUJTWVNfVkVORE9SSUQpOwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfU1VCU1lTVEVNX0lELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfSUQpOwotCi0JLyogQ29uZmlndXJlIGNvbW1hbmQgcmVnaXN0ZXIgYXMgYnVzIG1hc3RlciAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwgUENJX0NPTU1BTkRfTUFTVEVSKTsKLQotCS8qIDI0MG5TIFBDSSBjbG9jayAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfTEFURU5DWV9USU1FUiwgMSk7Ci0KLQkvKiBObyBlcnJvciByZXBvcnRpbmcgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0VSUkVOLCAwKTsKLQotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoMCwgUENJX0JSREdPUFQyLCAweDAwMDAwMTAxKTsKLQotfQotI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KLQotLyoKLSAqICBwY2lfbWFzdGVyX2luaXQKLSAqCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfTUFTVEVSX0lOSVQpCi12b2lkIHBjaV9tYXN0ZXJfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JdW5zaWduZWQgc2hvcnQgdGVtcF9zaG9ydDsKLQotCS8qCi0JICogV3JpdGUgdGhlIFBvd2VyUEM0NDAgRVAgUENJIENvbmZpZ3VyYXRpb24gcmVncy4KLQkgKiAgIEVuYWJsZSBQb3dlclBDNDQwIEVQIHRvIGJlIGEgbWFzdGVyIG9uIHRoZSBQQ0kgYnVzIChQTU0pLgotCSAqICAgRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYWN0IGFzIGEgUENJIG1lbW9yeSB0YXJnZXQgKFBUTSkuCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsICZ0ZW1wX3Nob3J0KTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsCi0JCQkgICAgICB0ZW1wX3Nob3J0IHwgUENJX0NPTU1BTkRfTUFTVEVSIHwKLQkJCSAgICAgIFBDSV9DT01NQU5EX01FTU9SWSk7Ci19Ci0jZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUKSAqLwotCi0vKgotICogIGlzX3BjaV9ob3N0Ci0gKgotICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYSBwY2kgc2NhbiBzaG91bGQgYmUKLSAqCXBlcmZvcm1lZC4gV2l0aCB2YXJpb3VzIGhhcmR3YXJlIGVudmlyb25tZW50cyAoZXNwZWNpYWxseSBjUENJIGFuZAotICoJUFBNQykgaXQncyBpbnN1ZmZpY2llbnQgdG8gZGVwZW5kIG9uIHRoZSBzdGF0ZSBvZiB0aGUgYXJiaXRlciBlbmFibGUKLSAqCWJpdCBpbiB0aGUgc3RyYXAgcmVnaXN0ZXIsIG9yIGdlbmVyaWMgaG9zdC9hZGFwdGVyIGFzc3VtcHRpb25zLgotICoKLSAqCVJhdGhlciB0aGFuIGhhcmQtY29kZSBhIGJhZCBhc3N1bXB0aW9uIGluIHRoZSBnZW5lcmFsIDQ0MCBjb2RlLCB0aGUKLSAqCTQ0MCBwY2kgY29kZSByZXF1aXJlcyB0aGUgYm9hcmQgdG8gZGVjaWRlIGF0IHJ1bnRpbWUuCi0gKgotICoJUmV0dXJuIDAgZm9yIGFkYXB0ZXIgbW9kZSwgbm9uLXplcm8gZm9yIGhvc3QgKG1vbmFyY2gpIG1vZGUuCi0gKgotICoKLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBpc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17CiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwpkaWZmIC0tZ2l0IGEvYm9hcmQvZ2RzeXMvZ2RwcGM0NDBldHgvdS1ib290LmxkcyBiL2JvYXJkL2dkc3lzL2dkcHBjNDQwZXR4L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYjM2ZWUuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZ2RzeXMvZ2RwcGM0NDBldHgvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC9nZHN5cy9nZHBwYzQ0MGV0eC9pbml0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2dkc3lzL2ludGlwL2ludGlwLmMgYi9ib2FyZC9nZHN5cy9pbnRpcC9pbnRpcC5jCmluZGV4IGI0MmU5MDguLjIzYTEwYzQgMTAwNjQ0Ci0tLSBhL2JvYXJkL2dkc3lzL2ludGlwL2ludGlwLmMKKysrIGIvYm9hcmQvZ2RzeXMvaW50aXAvaW50aXAuYwpAQCAtMTQxLDY0ICsxNDEsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyoKLQkgKiBEaXNhYmxlIGV2ZXJ5dGhpbmcKLQkgKi8KLQlvdXRfbGUzMigodm9pZCAqKVBDSUwwX1BJTTBTQSwgMCk7IC8qIGRpc2FibGUgKi8KLQlvdXRfbGUzMigodm9pZCAqKVBDSUwwX1BJTTFTQSwgMCk7IC8qIGRpc2FibGUgKi8KLQlvdXRfbGUzMigodm9pZCAqKVBDSUwwX1BJTTJTQSwgMCk7IC8qIGRpc2FibGUgKi8KLQlvdXRfbGUzMigodm9pZCAqKVBDSUwwX0VST01CQSwgMCk7IC8qIGRpc2FibGUgZXhwYW5zaW9uIHJvbSAqLwotCi0JLyoKLQkgKiBNYXAgYWxsIG9mIFNEUkFNIHRvIFBDSSBhZGRyZXNzIDB4MDAwMF8wMDAwLiBOb3RlIHRoYXQgdGhlIDQ0MAotCSAqIHN0cmFwcGluZyBvcHRpb25zIHRvIG5vdCBzdXBwb3J0IHNpemVzIHN1Y2ggYXMgMTI4LzI1NiBNQi4KLQkgKi8KLQlvdXRfbGUzMigodm9pZCAqKVBDSUwwX1BJTTBMQUwsIENPTkZJR19TWVNfU0RSQU1fQkFTRSk7Ci0Jb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QSU0wTEFILCAwKTsKLQlvdXRfbGUzMigodm9pZCAqKVBDSUwwX1BJTTBTQSwgfihnZC0+cmFtX3NpemUgLSAxKSB8IDEpOwotCW91dF9sZTMyKCh2b2lkICopUENJTDBfQkFSMCwgMCk7Ci0KLQkvKgotCSAqIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZAotCSAqLwotCW91dF9sZTE2KCh2b2lkICopUENJTDBfU0JTWVNWSUQsIENPTkZJR19TWVNfUENJX1NVQlNZU19WRU5ET1JJRCk7Ci0Jb3V0X2xlMTYoKHZvaWQgKilQQ0lMMF9TQlNZU0lELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfREVWSUNFSUQpOwotCi0Jb3V0X2xlMTYoKHZvaWQgKilQQ0lMMF9DTUQsIGluMTZyKFBDSUwwX0NNRCkgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOwotfQotI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLS8qCi0gKiBpc19wY2lfaG9zdAotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCi0gKiBwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKLSAqIFBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCi0gKiBiaXQgaW4gdGhlIHN0cmFwIHJlZ2lzdGVyLCBvciBnZW5lcmljIGhvc3QvYWRhcHRlciBhc3N1bXB0aW9ucy4KLSAqCi0gKiBSYXRoZXIgdGhhbiBoYXJkLWNvZGUgYSBiYWQgYXNzdW1wdGlvbiBpbiB0aGUgZ2VuZXJhbCA0NDAgY29kZSwgdGhlCi0gKiA0NDAgcGNpIGNvZGUgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGRlY2lkZSBhdCBydW50aW1lLgotICoKLSAqIFJldHVybiAwIGZvciBhZGFwdGVyIG1vZGUsIG5vbi16ZXJvIGZvciBob3N0IChtb25hcmNoKSBtb2RlLgotICovCi1pbnQgaXNfcGNpX2hvc3Qoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCS8qIEJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIGhvc3QuICovCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1BDSSAqLwotCiBpbnQgYm9hcmRfZWFybHlfaW5pdF9yKHZvaWQpCiB7CiAJLyoKZGlmZiAtLWdpdCBhL2JvYXJkL2dkc3lzL2ludGlwL3UtYm9vdC5sZHMgYi9ib2FyZC9nZHN5cy9pbnRpcC91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjRjNGMxLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2dkc3lzL2ludGlwL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwOAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC5ib290cGcgMHhGRkZGRjAwMCA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC5ib290cGcpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvZ2RzeXMvaW50aXAvaW5pdC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLnJvZGF0YSkKLSAgICAqKC5yb2RhdGExKQotICAgICooLnJvZGF0YS5zdHIxLjQpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL2dkc3lzL25lby91LWJvb3QubGRzIGIvYm9hcmQvZ2RzeXMvbmVvL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MjAyY2EuLjAwMDAwMDAKLS0tIGEvYm9hcmQvZ2RzeXMvbmVvL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvZ2VuODYwdC9nZW44NjB0LmMgYi9ib2FyZC9nZW44NjB0L2dlbjg2MHQuYwppbmRleCAwMDhmNzY1Li5iMzdhMGYyIDEwMDY0NAotLS0gYS9ib2FyZC9nZW44NjB0L2dlbjg2MHQuYworKysgYi9ib2FyZC9nZW44NjB0L2dlbjg2MHQuYwpAQCAtMjkyLDE0ICsyOTIsMyBAQAogCXB1dHMgKCIjIyMgUGxlYXNlIHBvd2VyIG9mZiB0aGUgYm9hcmQgIyMjXG4iKTsKIAl3aGlsZSAoMSk7CiB9Ci0KLSNpZmRlZiBDT05GSUdfUE9TVAotLyoKLSAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cwotICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCi0gKi8KLWludCBwb3N0X2hvdGtleXNfcHJlc3NlZCAodm9pZCkKLXsKLQlyZXR1cm4gMDsJCS8qIE5vIGhvdGtleXMgc3VwcG9ydGVkICovCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL2lwZWswMS9NYWtlZmlsZSBiL2JvYXJkL2lwZWswMS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGZkMmVmCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvaXBlazAxL01ha2VmaWxlCkBAIC0wLDAgKzEsNTAgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAzLTIwMDYKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworaW5jbHVkZSAkKFRPUERJUikvY29uZmlnLm1rCisKK0xJQgk9ICQob2JqKWxpYiQoQk9BUkQpLmEKKworQ09CSlMJOj0gJChCT0FSRCkubworCitTUkNTCTo9ICQoU09CSlM6Lm89LlMpICQoQ09CSlM6Lm89LmMpCitPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKENPQkpTKSkKK1NPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKKworJChMSUIpOgkkKG9iaikuZGVwZW5kICQoT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykKKworY2xlYW46CisJcm0gLWYgJChTT0JKUykgJChPQkpTKQorCitkaXN0Y2xlYW46CWNsZWFuCisJcm0gLWYgJChMSUIpIGNvcmUgKi5iYWsgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvYm9hcmQvaXBlazAxL2NvbmZpZy5tayBiL2JvYXJkL2lwZWswMS9jb25maWcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlY2IyOQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2lwZWswMS9jb25maWcubWsKQEAgLTAsMCArMSwzMCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNAorIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIElQRUswMSBib2FyZAorIworCitURVhUX0JBU0UgPSAweGZjMDAwMDAwCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EVEVYVF9CQVNFPSQoVEVYVF9CQVNFKSAtSSQoVE9QRElSKS9ib2FyZApkaWZmIC0tZ2l0IGEvYm9hcmQvaXBlazAxL2lwZWswMS5jIGIvYm9hcmQvaXBlazAxL2lwZWswMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2M2E4MWIKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9pcGVrMDEvaXBlazAxLmMKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDMtMjAwNAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIE1hcmsgSm9uYXMsIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBtYXJrLmpvbmFzQG1vdG9yb2xhLmNvbS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pY3JvU3lzIEdtYkgKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDkKKyAqIFdvbGZnYW5nIEdyYW5kZWdnZXIsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdnQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPG1wYzV4eHguaD4KKyNpbmNsdWRlIDxwY2kuaD4KKyNpbmNsdWRlIDxuZXRkZXYuaD4KKyNpbmNsdWRlIDxtaWlwaHkuaD4KKyNpbmNsdWRlIDxsaWJmZHQuaD4KKyNpbmNsdWRlIDxtYjg2Mnh4Lmg+CisjaW5jbHVkZSA8dmlkZW9fZmIuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpZmRlZiBDT05GSUdfT0ZfTElCRkRUCisjaW5jbHVkZSA8ZmR0X3N1cHBvcnQuaD4KKyNlbmRpZiAvKiBDT05GSUdfT0ZfTElCRkRUICovCisKKy8qIG10NDZ2MTZtMTYtNzUgKi8KKyNpZmRlZiBDT05GSUdfTVBDNTIwMF9ERFIKKy8qIFNldHRpbmdzIGZvciBYTEIgPSAxMzIgTUh6ICovCisjZGVmaW5lIFNEUkFNX01PREUJMHgwMThEMDAwMAorI2RlZmluZSBTRFJBTV9FTU9ERQkweDQwMDkwMDAwCisjZGVmaW5lIFNEUkFNX0NPTlRST0wJMHg3MTRmMGYwMAorI2RlZmluZSBTRFJBTV9DT05GSUcxCTB4NzM3MjI5MzAKKyNkZWZpbmUgU0RSQU1fQ09ORklHMgkweDQ3NzcwMDAwCisjZGVmaW5lIFNEUkFNX1RBUERFTEFZCTB4MTAwMDAwMDAKKyNlbHNlCisjZXJyb3IgU0RSQU0gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGJvYXJkCisjZW5kaWYKKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKK3N0YXRpYyB2b2lkIHNkcmFtX3N0YXJ0IChpbnQgaGlfYWRkcikKK3sKKwlzdHJ1Y3QgbXBjNXh4eF9zZHJhbSAqc2RyYW0gPSAoc3RydWN0IG1wYzV4eHhfc2RyYW0gKilNUEM1WFhYX1NEUkFNOworCWxvbmcgaGlfYWRkcl9iaXQgPSBoaV9hZGRyID8gMHgwMTAwMDAwMCA6IDA7CisKKwkvKiB1bmxvY2sgbW9kZSByZWdpc3RlciAqLworCW91dF9iZTMyICgmc2RyYW0tPmN0cmwsIFNEUkFNX0NPTlRST0wgfCAweDgwMDAwMDAwIHwgaGlfYWRkcl9iaXQpOworCisJLyogcHJlY2hhcmdlIGFsbCBiYW5rcyAqLworCW91dF9iZTMyICgmc2RyYW0tPmN0cmwsIFNEUkFNX0NPTlRST0wgfCAweDgwMDAwMDAyIHwgaGlfYWRkcl9iaXQpOworCisJLyogc2V0IG1vZGUgcmVnaXN0ZXI6IGV4dGVuZGVkIG1vZGUgKi8KKwlvdXRfYmUzMiAoJnNkcmFtLT5tb2RlLCBTRFJBTV9FTU9ERSk7CisKKwkvKiBzZXQgbW9kZSByZWdpc3RlcjogcmVzZXQgRExMICovCisJb3V0X2JlMzIgKCZzZHJhbS0+bW9kZSwgU0RSQU1fTU9ERSB8IDB4MDQwMDAwMDApOworCisJLyogcHJlY2hhcmdlIGFsbCBiYW5rcyAqLworCW91dF9iZTMyICgmc2RyYW0tPmN0cmwsIFNEUkFNX0NPTlRST0wgfCAweDgwMDAwMDAyIHwgaGlfYWRkcl9iaXQpOworCisJLyogYXV0byByZWZyZXNoICovCisJb3V0X2JlMzIgKCZzZHJhbS0+Y3RybCwgU0RSQU1fQ09OVFJPTCB8IDB4ODAwMDAwMDQgfCBoaV9hZGRyX2JpdCk7CisKKwkvKiBzZXQgbW9kZSByZWdpc3RlciAqLworCW91dF9iZTMyICgmc2RyYW0tPm1vZGUsIFNEUkFNX01PREUpOworCisJLyogbm9ybWFsIG9wZXJhdGlvbiAqLworCW91dF9iZTMyICgmc2RyYW0tPmN0cmwsIFNEUkFNX0NPTlRST0wgfCBoaV9hZGRyX2JpdCk7Cit9CisKKy8qCisgKiBBVFRFTlRJT046IEFsdGhvdWdoIHBhcnRpYWxseSByZWZlcmVuY2VkIGluaXRkcmFtIGRvZXMgTk9UIG1ha2UgcmVhbAorICogICAgICAgICAgICB1c2Ugb2YgQ09ORklHX1NZU19TRFJBTV9CQVNFLiBUaGUgY29kZSBkb2VzIG5vdCB3b3JrIGlmCisgKiAgICAgICAgICAgIENPTkZJR19TWVNfU0RSQU1fQkFTRSBpcyBzb21ldGhpbmcgZWxzZSB0aGFuIDB4MDAwMDAwMDAuCisgKi8KKworcGh5c19zaXplX3QgaW5pdGRyYW0gKGludCBib2FyZF90eXBlKQoreworCXN0cnVjdCBtcGM1eHh4X21tYXBfY3RsICptbWFwX2N0bCA9CisJCShzdHJ1Y3QgbXBjNXh4eF9tbWFwX2N0bCAqKUNPTkZJR19TWVNfTUJBUjsKKwlzdHJ1Y3QgbXBjNXh4eF9zZHJhbSAqc2RyYW0gPSAoc3RydWN0IG1wYzV4eHhfc2RyYW0gKilNUEM1WFhYX1NEUkFNOworCXN0cnVjdCBtcGM1eHh4X2NkbSAqY2RtID0gKHN0cnVjdCBtcGM1eHh4X2NkbSAqKU1QQzVYWFhfQ0RNOworCXVsb25nIGRyYW1zaXplID0gMDsKKwl1bG9uZyBkcmFtc2l6ZTIgPSAwOworCXVsb25nIHRlc3QxLCB0ZXN0MjsKKworCS8qIHNldHVwIFNEUkFNIGNoaXAgc2VsZWN0cyAqLworCW91dF9iZTMyICgmbW1hcF9jdGwtPnNkcmFtMCwgMHgwMDAwMDAxZSk7CS8qIDJHIGF0IDB4MCAqLworCW91dF9iZTMyICgmbW1hcF9jdGwtPnNkcmFtMSwgMHgwMDAwMDAwMCk7CS8qIGRpc2FibGVkICovCisKKwkvKiBzZXR1cCBjb25maWcgcmVnaXN0ZXJzICovCisJb3V0X2JlMzIgKCZzZHJhbS0+Y29uZmlnMSwgU0RSQU1fQ09ORklHMSk7CisJb3V0X2JlMzIgKCZzZHJhbS0+Y29uZmlnMiwgU0RSQU1fQ09ORklHMik7CisKKwkvKiBzZXQgdGFwIGRlbGF5ICovCisJb3V0X2JlMzIgKCZjZG0tPnBvcmNmZywgU0RSQU1fVEFQREVMQVkpOworCisJLyogZmluZCBSQU0gc2l6ZSB1c2luZyBTRFJBTSBDUzAgb25seSAqLworCXNkcmFtX3N0YXJ0ICgwKTsKKwl0ZXN0MSA9IGdldF9yYW1fc2l6ZSAoKGxvbmcgKilDT05GSUdfU1lTX1NEUkFNX0JBU0UsIDB4ODAwMDAwMDApOworCXNkcmFtX3N0YXJ0ICgxKTsKKwl0ZXN0MiA9IGdldF9yYW1fc2l6ZSAoKGxvbmcgKilDT05GSUdfU1lTX1NEUkFNX0JBU0UsIDB4ODAwMDAwMDApOworCWlmICh0ZXN0MSA+IHRlc3QyKSB7CisJCXNkcmFtX3N0YXJ0ICgwKTsKKwkJZHJhbXNpemUgPSB0ZXN0MTsKKwl9IGVsc2UgeworCQlkcmFtc2l6ZSA9IHRlc3QyOworCX0KKworCS8qIG1lbW9yeSBzbWFsbGVyIHRoYW4gMU1CIGlzIGltcG9zc2libGUgKi8KKwlpZiAoZHJhbXNpemUgPCAoMSA8PCAyMCkpCisJCWRyYW1zaXplID0gMDsKKworCS8qIHNldCBTRFJBTSBDUzAgc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIGFtb3VudCBvZiBSQU0gZm91bmQgKi8KKwlpZiAoZHJhbXNpemUgPiAwKQorCQlvdXRfYmUzMiAoJm1tYXBfY3RsLT5zZHJhbTAsCisJCQkgIDB4MTMgKyBfX2J1aWx0aW5fZmZzIChkcmFtc2l6ZSA+PiAyMCkgLSAxKTsKKwllbHNlCisJCW91dF9iZTMyICgmbW1hcF9jdGwtPnNkcmFtMSwgMCk7CS8qIGRpc2FibGVkICovCisKKwkvKgorCSAqIE9uIE1QQzUyMDBCIHdlIG5lZWQgdG8gc2V0IHRoZSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gZGVsYXkgaW4gdGhlCisJICogRERSIGNvbnRyb2xsZXIuIFBsZWFzZSByZWZlciB0byBGcmVlc2NhbGUncyBBTjMyMjEgIk1QQzUyMDBCIFNEUkFNCisJICogSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24iLCAzLjMuMSBTRGVsYXktLU1CQVIgKyAweDAxOTA6CisJICoKKwkgKiAiVGhlIFNEZWxheSBzaG91bGQgYmUgd3JpdHRlbiB0byBhIHZhbHVlIG9mIDB4MDAwMDAwMDQuIEl0IGlzCisJICogcmVxdWlyZWQgdG8gYWNjb3VudCBmb3IgY2hhbmdlcyBjYXVzZWQgYnkgbm9ybWFsIHdhZmVyIHByb2Nlc3NpbmcKKwkgKiBwYXJhbWV0ZXJzLiIKKwkgKi8KKwlvdXRfYmUzMiAoJnNkcmFtLT5zZGVsYXksIDB4MDQpOworCisJcmV0dXJuIGRyYW1zaXplICsgZHJhbXNpemUyOworfQorCitpbnQgY2hlY2tib2FyZCAodm9pZCkKK3sKKwlwdXRzICgiQm9hcmQ6IElQRUswMSBcbiIpOworCXJldHVybiAwOworfQorCit2b2lkIGZsYXNoX3ByZWluaXQgKHZvaWQpCit7CisJc3RydWN0IG1wYzV4eHhfbHBiICpscGIgPSAoc3RydWN0IG1wYzV4eHhfbHBiICopTVBDNVhYWF9MUEI7CisKKwkvKgorCSAqIE5vdywgd2hlbiB3ZSBhcmUgaW4gUkFNLCBlbmFibGUgZmxhc2ggd3JpdGUKKwkgKiBhY2Nlc3MgZm9yIGRldGVjdGlvbiBwcm9jZXNzLgorCSAqIE5vdGUgdGhhdCBDU19CT09UIGNhbm5vdCBiZSBjbGVhcmVkIHdoZW4KKwkgKiBleGVjdXRpbmcgaW4gZmxhc2guCisJICovCisJY2xyYml0c19iZTMyICgmbHBiLT5jczBfY2ZnLCAweDEpOwkvKiBjbGVhciBSTyAqLworfQorCit2b2lkIGZsYXNoX2FmdGVyaW5pdCAodWxvbmcgc3RhcnQsIHVsb25nIHNpemUpCit7CisJc3RydWN0IG1wYzV4eHhfbW1hcF9jdGwgKm1tYXBfY3RsID0KKwkJKHN0cnVjdCBtcGM1eHh4X21tYXBfY3RsICopQ09ORklHX1NZU19NQkFSOworCisjaWYgZGVmaW5lZChDT05GSUdfQk9PVF9ST00pCisJLyogYWRqdXN0IG1hcHBpbmcgKi8KKwlvdXRfYmUzMiAoJm1tYXBfY3RsLT5jczFfc3RhcnQsIFNUQVJUX1JFRyAoc3RhcnQpKTsKKwlvdXRfYmUzMiAoJm1tYXBfY3RsLT5jczFfc3RvcCwgU1RPUF9SRUcgKHN0YXJ0LCBzaXplKSk7CisjZWxzZQorCS8qIGFkanVzdCBtYXBwaW5nICovCisJb3V0X2JlMzIgKCZtbWFwX2N0bC0+Ym9vdF9zdGFydCwgU1RBUlRfUkVHIChzdGFydCkpOworCW91dF9iZTMyICgmbW1hcF9jdGwtPmNzMF9zdGFydCwgU1RBUlRfUkVHIChzdGFydCkpOworCW91dF9iZTMyICgmbW1hcF9jdGwtPmJvb3Rfc3RvcCwgU1RPUF9SRUcgKHN0YXJ0LCBzaXplKSk7CisJb3V0X2JlMzIgKCZtbWFwX2N0bC0+Y3MwX3N0b3AsIFNUT1BfUkVHIChzdGFydCwgc2l6ZSkpOworI2VuZGlmCit9CisKK2V4dGVybiBmbGFzaF9pbmZvX3QgZmxhc2hfaW5mb1tdOwkvKiBpbmZvIGZvciBGTEFTSCBjaGlwcyAqLworCitpbnQgbWlzY19pbml0X3IgKHZvaWQpCit7CisJLyogYWRqdXN0IGZsYXNoIHN0YXJ0ICovCisJZ2QtPmJkLT5iaV9mbGFzaHN0YXJ0ID0gZmxhc2hfaW5mb1swXS5zdGFydFswXTsKKwlyZXR1cm4gKDApOworfQorCisjaWZkZWYJQ09ORklHX1BDSQorc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBob3NlOworCitleHRlcm4gdm9pZCBwY2lfbXBjNXh4eF9pbml0IChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKik7CisKK3ZvaWQgcGNpX2luaXRfYm9hcmQgKHZvaWQpCit7CisJcGNpX21wYzV4eHhfaW5pdCAoJmhvc2UpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQordm9pZCBmdF9ib2FyZF9zZXR1cCAodm9pZCAqYmxvYiwgYmRfdCAqIGJkKQoreworCWZ0X2NwdV9zZXR1cCAoYmxvYiwgYmQpOworCWZkdF9maXh1cF9tZW1vcnkgKGJsb2IsICh1NjQpIGJkLT5iaV9tZW1zdGFydCwgKHU2NCkgYmQtPmJpX21lbXNpemUpOworfQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX09GX0xJQkZEVCkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApICovCisKK2ludCBib2FyZF9ldGhfaW5pdChiZF90ICpiaXMpCit7CisgICAgICAgIGNwdV9ldGhfaW5pdChiaXMpOyAvKiBCdWlsdCBpbiBGRUMgY29tZXMgZmlyc3QgKi8KKyAgICAgICAgcmV0dXJuIHBjaV9ldGhfaW5pdChiaXMpOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPCitleHRlcm4gR3JhcGhpY0RldmljZSBtYjg2Mnh4OworCitzdGF0aWMgY29uc3QgZ2RjX3JlZ3MgaW5pdF9yZWdzW10gPSB7CisJezB4MDEwMCwgMHgwMDAwMDkwMH0sCisJezB4MDAyMCwgMHg4MDE5MDI1N30sCisJezB4MDAyNCwgMHgwMDAwMDAwMH0sCisJezB4MDAyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAyYywgMHgwMDAwMDAwMH0sCisJezB4MDExMCwgMHgwMDAwMDAwMH0sCisJezB4MDExNCwgMHgwMDAwMDAwMH0sCisJezB4MDExOCwgMHgwMjU3MDMyMH0sCisJezB4MDAwNCwgMHgwNDFmMDAwMH0sCisJezB4MDAwOCwgMHgwMzFmMDMxZn0sCisJezB4MDAwYywgMHgwNjdmMDM0N30sCisJezB4MDAxMCwgMHgwMjc4MDAwMH0sCisJezB4MDAxNCwgMHgwMjU3MDI1Y30sCisJezB4MDAxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAxYywgMHgwMjU3MDMyMH0sCisJezB4MDEwMCwgMHg4MDAxMDkwMH0sCisJezB4MCwgMHgwfQorfTsKKworY29uc3QgZ2RjX3JlZ3MgKmJvYXJkX2dldF9yZWdzICh2b2lkKQoreworCXJldHVybiBpbml0X3JlZ3M7Cit9CisKKy8qIFJldHVybnMgTGltZSBiYXNlIGFkZHJlc3MgKi8KK3Vuc2lnbmVkIGludCBib2FyZF92aWRlb19pbml0ICh2b2lkKQoreworCWlmIChtYjg2Mnh4X3Byb2JlIChDT05GSUdfU1lTX0xJTUVfQkFTRSkgIT0gTUI4NjJYWF9UWVBFX0xJTUUpCisJCXJldHVybiAwOworCisJbWI4NjJ4eC53aW5TaXplWCA9IDgwMDsKKwltYjg2Mnh4LndpblNpemVZID0gNjAwOworCW1iODYyeHguZ2RmSW5kZXggPSBHREZfMTVCSVRfNTU1UkdCOworCW1iODYyeHguZ2RmQnl0ZXNQUCA9IDI7CisKKwlyZXR1cm4gQ09ORklHX1NZU19MSU1FX0JBU0U7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19DT05TT0xFX0VYVFJBX0lORk8pCisvKgorICogUmV0dXJuIHRleHQgdG8gYmUgcHJpbnRlZCBiZXNpZGVzIHRoZSBsb2dvLgorICovCit2b2lkIHZpZGVvX2dldF9pbmZvX3N0ciAoaW50IGxpbmVfbnVtYmVyLCBjaGFyICppbmZvKQoreworCWlmIChsaW5lX251bWJlciA9PSAxKQorCQlzdHJjcHkgKGluZm8sICIgQm9hcmQ6IElQRUswMSIpOworCWVsc2UKKwkJaW5mb1swXSA9ICdcMCc7Cit9CisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfVklERU8gKi8KZGlmZiAtLWdpdCBhL2JvYXJkL2pzZS9NYWtlZmlsZSBiL2JvYXJkL2pzZS9NYWtlZmlsZQppbmRleCA2YmUwM2FjLi5mYzcxNjAxIDEwMDY0NAotLS0gYS9ib2FyZC9qc2UvTWFrZWZpbGUKKysrIGIvYm9hcmQvanNlL01ha2VmaWxlCkBAIC0zMyw3ICszMyw3IEBACiBTT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUykpCiAKICQoTElCKToJJChPQkpTKSAkKFNPQkpTKQotCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKSAkKFNPQkpTKQogCiBjbGVhbjoKIAlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCmRpZmYgLS1naXQgYS9ib2FyZC9qc2UvdS1ib290LmxkcyBiL2JvYXJkL2pzZS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDBhMjFjLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2pzZS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgICAgIDogewotICAgIC8qIFRoZSBzdGFydC5vIGZpbGUgaW5jbHVkZXMgdGhlIGluaXRpYWwganVtcCB2ZWN0b3IgdGhhdAotICAgICAgIG11c3QgYmUgbG9jYXRlZCBpbiB0aGUgYmVnaW5uaW5nLiBJdCBpcyB0aGUgYmFzaWMgcnVuLQotICAgICAgIHRpbWUgZnVuY3Rpb24gdGhhdCBjYWxscyBhbGwgb3RoZXIgZnVuY3Rpb25zLiAqLwotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICBib2FyZC9qc2UvaW5pdC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2tnZGIubwkoLnRleHQpCi0KLS8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCi0vKiAgICBjb21tb24vZW52X2VtYmVkZGVkLm8oLnRleHQpKi8KLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9rb3JhdC9rb3JhdC5jIGIvYm9hcmQva29yYXQva29yYXQuYwppbmRleCA4YzY3NGEyLi5kNTI2MGRjIDEwMDY0NAotLS0gYS9ib2FyZC9rb3JhdC9rb3JhdC5jCisrKyBiL2JvYXJkL2tvcmF0L2tvcmF0LmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHBjNHh4LXVpYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vNHh4X3BjaS5oPgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIApAQCAtNTk0LDcxICs1OTUsMTMgQEAKIC8qCiAgKiBBc3NpZ24gaW50ZXJydXB0cyB0byBQQ0kgZGV2aWNlcy4KICAqLwotdm9pZCBrb3JhdF9wY2lfZml4dXBfaXJxKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgcGNpX2Rldl90IGRldikKK3ZvaWQgYm9hcmRfcGNpX2ZpeHVwX2lycShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHBjaV9kZXZfdCBkZXYpCiB7CiAJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIFZFQ05VTV9FSVJRMik7CiB9CiAjZW5kaWYKIAogLyoKLSAqIHBjaV9wcmVfaW5pdAotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKLSAqIHRoZSBib2FyZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hlY2sgdGhpbmdzLiBSZXR1cm5pbmcgYSB2YWx1ZSBvZiB6ZXJvCi0gKiBpbmRpY2F0ZXMgdGhhdCB0aGluZ3MgYXJlIGJhZCAmIFBDSSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgYWJvcnRlZC4KLSAqCi0gKiBEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCi0gKiAoYWRkIHJlZ2lvbnMsIG92ZXJyaWRlIGRlZmF1bHQgYWNjZXNzIHJvdXRpbmVzLCBldGMpIG9yIHBlcmZvcm0KLSAqIGNlcnRhaW4gcHJlLWluaXRpYWxpemF0aW9uIGFjdGlvbnMuCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi1pbnQgcGNpX3ByZV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQkvKgotCSAqIFNldCBwcmlvcml0eSBmb3IgYWxsIFBMQjMgZGV2aWNlcyB0byAwLgotCSAqIFNldCBQTEIzIGFyYml0ZXIgdG8gZmFpciBtb2RlLgotCSAqLwotCW1mc2RyKFNEMF9BTVAxLCBhZGRyKTsKLQltdHNkcihTRDBfQU1QMSwgKGFkZHIgJiAweDAwMDAwMEZGKSB8IDB4MDAwMEZGMDApOwotCWFkZHIgPSBtZmRjcihQTEIzX0FDUik7Ci0JbXRkY3IoUExCM19BQ1IsIGFkZHIgfCAweDgwMDAwMDAwKTsKLQotCS8qCi0JICogU2V0IHByaW9yaXR5IGZvciBhbGwgUExCNCBkZXZpY2VzIHRvIDAuCi0JICovCi0JbWZzZHIoU0QwX0FNUDAsIGFkZHIpOwotCW10c2RyKFNEMF9BTVAwLCAoYWRkciAmIDB4MDAwMDAwRkYpIHwgMHgwMDAwRkYwMCk7Ci0JYWRkciA9IG1mZGNyKFBMQjRfQUNSKSB8IDB4YTAwMDAwMDA7CS8qIFdhcyAweDgtLS0tICovCi0JbXRkY3IoUExCNF9BQ1IsIGFkZHIpOwotCi0JLyoKLQkgKiBTZXQgTmVidWxhIFBMQjQgYXJiaXRlciB0byBmYWlyIG1vZGUuCi0JICovCi0JLyogU2VnbWVudDAgKi8KLQlhZGRyID0gKG1mZGNyKFBMQjBfQUNSKSAmIH5QTEIwX0FDUl9QUE1fTUFTSykgfCBQTEIwX0FDUl9QUE1fRkFJUjsKLQlhZGRyID0gKGFkZHIgJiB+UExCMF9BQ1JfSEJVX01BU0spIHwgUExCMF9BQ1JfSEJVX0VOQUJMRUQ7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX1JEUF9NQVNLKSB8IFBMQjBfQUNSX1JEUF80REVFUDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMF9BQ1JfV1JQX01BU0spIHwgUExCMF9BQ1JfV1JQXzJERUVQOwotCW10ZGNyKFBMQjBfQUNSLCBhZGRyKTsKLQotCS8qIFNlZ21lbnQxICovCi0JYWRkciA9IChtZmRjcihQTEIxX0FDUikgJiB+UExCMV9BQ1JfUFBNX01BU0spIHwgUExCMV9BQ1JfUFBNX0ZBSVI7Ci0JYWRkciA9IChhZGRyICYgflBMQjFfQUNSX0hCVV9NQVNLKSB8IFBMQjFfQUNSX0hCVV9FTkFCTEVEOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9SRFBfTUFTSykgfCBQTEIxX0FDUl9SRFBfNERFRVA7Ci0JYWRkciA9IChhZGRyICYgflBMQjFfQUNSX1dSUF9NQVNLKSB8IFBMQjFfQUNSX1dSUF8yREVFUDsKLQltdGRjcihQTEIxX0FDUiwgYWRkcik7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0lfUE5QKQotCWhvc2UtPmZpeHVwX2lycSA9IGtvcmF0X3BjaV9maXh1cF9pcnE7Ci0jZW5kaWYKLQotCXJldHVybiAxOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KLQotLyoKICAqIHBjaV90YXJnZXRfaW5pdAogICoKICAqIFRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCkBAIC02NjgsNjIgKzYxMSwxMCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkKIHZvaWQgcGNpX3RhcmdldF9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKLQkvKgotCSAqIFNldCB1cCBEaXJlY3QgTU1JTyByZWdpc3RlcnMKLQkgKi8KLQkvKgotCSAqIFBvd2VyUEM0NDBFUFggUENJIE1hc3RlciBjb25maWd1cmF0aW9uLgotCSAqIE1hcCBvbmUgMUdpZyByYW5nZSBvZiBQTEIvcHJvY2Vzc29yIGFkZHJlc3NlcyB0byBQQ0kgbWVtb3J5IHNwYWNlLgotCSAqIFBMQiBhZGRyZXNzIDB4ODAwMDAwMDAtMHhCRkZGRkZGRgotCSAqICAgICA9PT4gUENJIGFkZHJlc3MgMHg4MDAwMDAwMC0weEJGRkZGRkZGCi0JICogVXNlIGJ5dGUgcmV2ZXJzZWQgb3V0IHJvdXRpbmVzIHRvIGhhbmRsZSBlbmRpYW5lc3MuCi0JICogTWFrZSB0aGlzIHJlZ2lvbiBub24tcHJlZmV0Y2hhYmxlLgotCSAqLwotCW91dDMycihQQ0lMMF9QTU0wTUEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIE1hc2svQXR0cmlidXRlICovCi0JCQkJCQkvKiAtIGRpc2FibGVkIGI0IHNldHRpbmcgKi8KLQlvdXQzMnIoUENJTDBfUE1NMExBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsJLyogUE1NMCBMb2NhbCBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBQQ0lMQSwKLQkgICAgICAgQ09ORklHX1NZU19QQ0lfTUVNQkFTRSk7CQkvKiBQTU0wIFBDSSBMb3cgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0wUENJSEEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NME1BLCAweEUwMDAwMDAxKTsJLyogNTEyTSArIE5vIHByZWZldGNoaW5nLCAqLwotCQkJCQkJLyogYW5kIGVuYWJsZSByZWdpb24gKi8KLQotCW91dDMycihQQ0lMMF9QTU0xTUEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIE1hc2svQXR0cmlidXRlICovCi0JCQkJCQkvKiAtIGRpc2FibGVkIGI0IHNldHRpbmcgKi8KLQlvdXQzMnIoUENJTDBfUE1NMUxBLAotCSAgICAgICBDT05GSUdfU1lTX1BDSV9NRU1CQVNFICsgMHgyMDAwMDAwMCk7CS8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0xUENJTEEsCi0JICAgICAgIENPTkZJR19TWVNfUENJX01FTUJBU0UgKyAweDIwMDAwMDAwKTsJLyogUE1NMCBQQ0kgTG93IEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMVBDSUhBLCAweDAwMDAwMDAwKTsJLyogUE1NMCBQQ0kgSGlnaCBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFNQSwgMHhFMDAwMDAwMSk7CS8qIDUxMk0gKyBObyBwcmVmZXRjaGluZywgKi8KLQkJCQkJCS8qIGFuZCBlbmFibGUgcmVnaW9uICovCi0KLQlvdXQzMnIoUENJTDBfUFRNMU1TLCAweDAwMDAwMDAxKTsJLyogTWVtb3J5IFNpemUvQXR0cmlidXRlICovCi0Jb3V0MzJyKFBDSUwwX1BUTTFMQSwgMCk7CQkvKiBMb2NhbCBBZGRyLiBSZWcgKi8KLQlvdXQzMnIoUENJTDBfUFRNMk1TLCAwKTsJCS8qIE1lbW9yeSBTaXplL0F0dHJpYnV0ZSAqLwotCW91dDMycihQQ0lMMF9QVE0yTEEsIDApOwkJLyogTG9jYWwgQWRkci4gUmVnICovCisJLyogRmlyc3QgZG8gNDQwRVAoeCkgY29tbW9uIHNldHVwICovCisJX19wY2lfdGFyZ2V0X2luaXQoaG9zZSk7CiAKIAkvKgotCSAqIFNldCB1cCBDb25maWd1cmF0aW9uIHJlZ2lzdGVycwotCSAqLwotCi0JLyogUHJvZ3JhbSB0aGUgYm9hcmQncyBzdWJzeXN0ZW0gaWQvdmVuZG9yIGlkICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAotCQkJICAgICAgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX1NVQlNZU1RFTV9JRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0lEKTsKLQotCS8qIENvbmZpZ3VyZSBjb21tYW5kIHJlZ2lzdGVyIGFzIGJ1cyBtYXN0ZXIgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsIFBDSV9DT01NQU5EX01BU1RFUik7Ci0KLQkvKiAyNDBuUyBQQ0kgY2xvY2sgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0xBVEVOQ1lfVElNRVIsIDEpOwotCi0JLyogTm8gZXJyb3IgcmVwb3J0aW5nICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9FUlJFTiwgMCk7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKDAsIFBDSV9CUkRHT1BUMiwgMHgwMDAwMDEwMSk7Ci0KLQkvKgogCSAqIFNldCB1cCBDb25maWd1cmF0aW9uIHJlZ2lzdGVycyBmb3Igb24tYm9hcmQgTkVDIHVQRDcyMDEwMSBVU0IKIAkgKiBjb250cm9sbGVyLgogCSAqLwpAQCAtNzMxLDU1ICs2MjIsNiBAQAogfQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9NQVNURVJfSU5JVCkKLXZvaWQgcGNpX21hc3Rlcl9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wX3Nob3J0OwotCi0JLyoKLQkgKiBXcml0ZSB0aGUgUG93ZXJQQzQ0MCBFUCBQQ0kgQ29uZmlndXJhdGlvbiByZWdzLgotCSAqIEVuYWJsZSBQb3dlclBDNDQwIEVQIHRvIGJlIGEgbWFzdGVyIG9uIHRoZSBQQ0kgYnVzIChQTU0pLgotCSAqIEVuYWJsZSBQb3dlclBDNDQwIEVQIHRvIGFjdCBhcyBhIFBDSSBtZW1vcnkgdGFyZ2V0IChQVE0pLgotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCAmdGVtcF9zaG9ydCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELAotCQkJICAgICAgdGVtcF9zaG9ydCB8IFBDSV9DT01NQU5EX01BU1RFUiB8Ci0JCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBpc19wY2lfaG9zdAotICoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCi0gKiBwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKLSAqIFBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCi0gKiBiaXQgaW4gdGhlIHN0cmFwIHJlZ2lzdGVyLCBvciBnZW5lcmljIGhvc3QvYWRhcHRlciBhc3N1bXB0aW9ucy4KLSAqCi0gKiBSYXRoZXIgdGhhbiBoYXJkLWNvZGUgYSBiYWQgYXNzdW1wdGlvbiBpbiB0aGUgZ2VuZXJhbCA0NDAgY29kZSwgdGhlCi0gKiA0NDAgcGNpIGNvZGUgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGRlY2lkZSBhdCBydW50aW1lLgotICoKLSAqIFJldHVybiAwIGZvciBhZGFwdGVyIG1vZGUsIG5vbi16ZXJvIGZvciBob3N0IChtb25hcmNoKSBtb2RlLgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IGlzX3BjaV9ob3N0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQkvKiBLb3JhdCBpcyBhbHdheXMgY29uZmlndXJlZCBhcyBob3N0LiAqLwotCXJldHVybiAoMSk7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfUE9TVCkKLS8qCi0gKiBSZXR1cm5zIDEgaWYga2V5cyBwcmVzc2VkIHRvIHN0YXJ0IHRoZSBwb3dlci1vbiBsb25nLXJ1bm5pbmcgdGVzdHMKLSAqIENhbGxlZCBmcm9tIGJvYXJkX2luaXRfZigpLgotICovCi1pbnQgcG9zdF9ob3RrZXlzX3ByZXNzZWQodm9pZCkKLXsKLQlyZXR1cm4gMDsJLyogTm8gaG90a2V5cyBzdXBwb3J0ZWQgKi8KLX0KLSNlbmRpZiAvKiBDT05GSUdfUE9TVCAqLwotCiAjaWYgZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKIHZvaWQgZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCiB7CmRpZmYgLS1naXQgYS9ib2FyZC9rb3JhdC91LWJvb3QubGRzIGIvYm9hcmQva29yYXQvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllYzU2Yi4uMDAwMDAwMAotLS0gYS9ib2FyZC9rb3JhdC91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAuYm9vdHBnIDB4RkZGRkYwMDAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSguYm9vdHBnKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLQotICBwcGNlbnZfYXNzZXJ0ID0gQVNTRVJUKC4gPCAweEZGRkY4MDAwLCAiLmJzcyBzZWN0aW9uIHRvbyBiaWcsIG92ZXJsYXBzIC5wcGNlbnYgc2VjdGlvbi4gUGxlYXNlIHVwZGF0ZSB5b3VyIGNvbmZndXJhdGlvbjogQ09ORklHX1NZU19NT05JVE9SX0JBU0UsIENPTkZJR19TWVNfTU9OSVRPUl9MRU4gYW5kIFRFWFRfQkFTRSBtYXkgbmVlZCB0byBiZSBtb2RpZmllZC4iKTsKLQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQva3VwL2NvbW1vbi9rdXAuYyBiL2JvYXJkL2t1cC9jb21tb24va3VwLmMKaW5kZXggZmVjNTQwNy4uMjQxOGQ1OSAxMDA2NDQKLS0tIGEvYm9hcmQva3VwL2NvbW1vbi9rdXAuYworKysgYi9ib2FyZC9rdXAvY29tbW9uL2t1cC5jCkBAIC03MCwxNCArNzAsMyBAQAogCWVsc2UKIAkJc2V0ZW52ICgia2V5MSIsICJvbiIpOwogfQotCi0jaWZkZWYgQ09ORklHX1BPU1QKLS8qCi0gKiBSZXR1cm5zIDEgaWYga2V5cyBwcmVzc2VkIHRvIHN0YXJ0IHRoZSBwb3dlci1vbiBsb25nLXJ1bm5pbmcgdGVzdHMKLSAqIENhbGxlZCBmcm9tIGJvYXJkX2luaXRfZigpLgotICovCi1pbnQgcG9zdF9ob3RrZXlzX3ByZXNzZWQgKHZvaWQpCi17Ci0JcmV0dXJuICgwKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvbHdtb241L2x3bW9uNS5jIGIvYm9hcmQvbHdtb241L2x3bW9uNS5jCmluZGV4IGVmN2YyZTguLjQxNWUwMzYgMTAwNjQ0Ci0tLSBhL2JvYXJkL2x3bW9uNS9sd21vbjUuYworKysgYi9ib2FyZC9sd21vbjUvbHdtb241LmMKQEAgLTI3NSwxNjYgKzI3NSw2IEBACiAJcmV0dXJuICgwKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfcHJlX2luaXQKLSAqCi0gKiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHJlZ2lzdGVyaW5nIHRoZSBob3NlIGFuZCBnaXZlcwotICogIHRoZSBib2FyZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY2hlY2sgdGhpbmdzLiBSZXR1cm5pbmcgYSB2YWx1ZSBvZiB6ZXJvCi0gKiAgaW5kaWNhdGVzIHRoYXQgdGhpbmdzIGFyZSBiYWQgJiBQQ0kgaW5pdGlhbGl6YXRpb24gc2hvdWxkIGJlIGFib3J0ZWQuCi0gKgotICoJRGlmZmVyZW50IGJvYXJkcyBtYXkgd2lzaCB0byBjdXN0b21pemUgdGhlIHBjaSBjb250cm9sbGVyIHN0cnVjdHVyZQotICoJKGFkZCByZWdpb25zLCBvdmVycmlkZSBkZWZhdWx0IGFjY2VzcyByb3V0aW5lcywgZXRjKSBvciBwZXJmb3JtCi0gKgljZXJ0YWluIHByZS1pbml0aWFsaXphdGlvbiBhY3Rpb25zLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IHBjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAgfCBTZXQgcHJpb3JpdHkgZm9yIGFsbCBQTEIzIGRldmljZXMgdG8gMC4KLQkgIHwgU2V0IFBMQjMgYXJiaXRlciB0byBmYWlyIG1vZGUuCi0JICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbWZzZHIoU0QwX0FNUDEsIGFkZHIpOwotCW10c2RyKFNEMF9BTVAxLCAoYWRkciAmIDB4MDAwMDAwRkYpIHwgMHgwMDAwRkYwMCk7Ci0JYWRkciA9IG1mZGNyKFBMQjNfQUNSKTsKLQltdGRjcihQTEIzX0FDUiwgYWRkciB8IDB4ODAwMDAwMDApOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAgfCBTZXQgcHJpb3JpdHkgZm9yIGFsbCBQTEI0IGRldmljZXMgdG8gMC4KLQkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQltZnNkcihTRDBfQU1QMCwgYWRkcik7Ci0JbXRzZHIoU0QwX0FNUDAsIChhZGRyICYgMHgwMDAwMDBGRikgfCAweDAwMDBGRjAwKTsKLQlhZGRyID0gbWZkY3IoUExCNF9BQ1IpIHwgMHhhMDAwMDAwMDsJLyogV2FzIDB4OC0tLS0gKi8KLQltdGRjcihQTEI0X0FDUiwgYWRkcik7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICB8IFNldCBOZWJ1bGEgUExCNCBhcmJpdGVyIHRvIGZhaXIgbW9kZS4KLQkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQkvKiBTZWdtZW50MCAqLwotCWFkZHIgPSAobWZkY3IoUExCMF9BQ1IpICYgflBMQjBfQUNSX1BQTV9NQVNLKSB8IFBMQjBfQUNSX1BQTV9GQUlSOwotCWFkZHIgPSAoYWRkciAmIH5QTEIwX0FDUl9IQlVfTUFTSykgfCBQTEIwX0FDUl9IQlVfRU5BQkxFRDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMF9BQ1JfUkRQX01BU0spIHwgUExCMF9BQ1JfUkRQXzRERUVQOwotCWFkZHIgPSAoYWRkciAmIH5QTEIwX0FDUl9XUlBfTUFTSykgfCBQTEIwX0FDUl9XUlBfMkRFRVA7Ci0JbXRkY3IoUExCMF9BQ1IsIGFkZHIpOwotCi0JLyogU2VnbWVudDEgKi8KLQlhZGRyID0gKG1mZGNyKFBMQjFfQUNSKSAmIH5QTEIxX0FDUl9QUE1fTUFTSykgfCBQTEIxX0FDUl9QUE1fRkFJUjsKLQlhZGRyID0gKGFkZHIgJiB+UExCMV9BQ1JfSEJVX01BU0spIHwgUExCMV9BQ1JfSEJVX0VOQUJMRUQ7Ci0JYWRkciA9IChhZGRyICYgflBMQjFfQUNSX1JEUF9NQVNLKSB8IFBMQjFfQUNSX1JEUF80REVFUDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMV9BQ1JfV1JQX01BU0spIHwgUExCMV9BQ1JfV1JQXzJERUVQOwotCW10ZGNyKFBMQjFfQUNSLCBhZGRyKTsKLQotCXJldHVybiAxOwotfQotI2VuZGlmCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBwY2lfdGFyZ2V0X2luaXQKLSAqCi0gKglUaGUgYm9vdHN0cmFwIGNvbmZpZ3VyYXRpb24gcHJvdmlkZXMgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHBjaQotICoJaW5ib3VuZCBtYXAgKFBJTSkuIEJ1dCB0aGUgYm9vdHN0cmFwIGNvbmZpZyBjaG9pY2VzIGFyZSBsaW1pdGVkIGFuZAotICoJbWF5IG5vdCBiZSBzdWZmaWNpZW50IGZvciBhIGdpdmVuIGJvYXJkLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKQotdm9pZCBwY2lfdGFyZ2V0X2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICogU2V0IHVwIERpcmVjdCBNTUlPIHJlZ2lzdGVycwotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICB8IFBvd2VyUEM0NDBFUFggUENJIE1hc3RlciBjb25maWd1cmF0aW9uLgotCSAgfCBNYXAgb25lIDFHaWcgcmFuZ2Ugb2YgUExCL3Byb2Nlc3NvciBhZGRyZXNzZXMgdG8gUENJIG1lbW9yeSBzcGFjZS4KLQkgIHwgICBQTEIgYWRkcmVzcyAweEEwMDAwMDAwLTB4REZGRkZGRkYgPT0+IFBDSSBhZGRyZXNzIDB4QTAwMDAwMDAtMHhERkZGRkZGRgotCSAgfCAgIFVzZSBieXRlIHJldmVyc2VkIG91dCByb3V0aW5lcyB0byBoYW5kbGUgZW5kaWFuZXNzLgotCSAgfCBNYWtlIHRoaXMgcmVnaW9uIG5vbi1wcmVmZXRjaGFibGUuCi0JICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDMycihQQ0lMMF9QTU0wTUEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIE1hc2svQXR0cmlidXRlIC0gZGlzYWJsZWQgYjQgc2V0dGluZyAqLwotCW91dDMycihQQ0lMMF9QTU0wTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UpOwkvKiBQTU0wIExvY2FsIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMFBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsJLyogUE1NMCBQQ0kgTG93IEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMFBDSUhBLCAweDAwMDAwMDAwKTsJLyogUE1NMCBQQ0kgSGlnaCBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBNQSwgMHhFMDAwMDAwMSk7CS8qIDUxMk0gKyBObyBwcmVmZXRjaGluZywgYW5kIGVuYWJsZSByZWdpb24gKi8KLQotCW91dDMycihQQ0lMMF9QTU0xTUEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIE1hc2svQXR0cmlidXRlIC0gZGlzYWJsZWQgYjQgc2V0dGluZyAqLwotCW91dDMycihQQ0lMMF9QTU0xTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UyKTsgLyogUE1NMCBMb2NhbCBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFQQ0lMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRTIpOwkvKiBQTU0wIFBDSSBMb3cgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0xUENJSEEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMU1BLCAweEUwMDAwMDAxKTsJLyogNTEyTSArIE5vIHByZWZldGNoaW5nLCBhbmQgZW5hYmxlIHJlZ2lvbiAqLwotCi0Jb3V0MzJyKFBDSUwwX1BUTTFNUywgMHgwMDAwMDAwMSk7CS8qIE1lbW9yeSBTaXplL0F0dHJpYnV0ZSAqLwotCW91dDMycihQQ0lMMF9QVE0xTEEsIDApOwkvKiBMb2NhbCBBZGRyLiBSZWcgKi8KLQlvdXQzMnIoUENJTDBfUFRNMk1TLCAwKTsJLyogTWVtb3J5IFNpemUvQXR0cmlidXRlICovCi0Jb3V0MzJyKFBDSUwwX1BUTTJMQSwgMCk7CS8qIExvY2FsIEFkZHIuIFJlZyAqLwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiBTZXQgdXAgQ29uZmlndXJhdGlvbiByZWdpc3RlcnMKLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotCS8qIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZCAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfU1VCU1lTVEVNX1ZFTkRPUl9JRCwKLQkJCSAgICAgIENPTkZJR19TWVNfUENJX1NVQlNZU19WRU5ET1JJRCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9TVUJTWVNURU1fSUQsIENPTkZJR19TWVNfUENJX1NVQlNZU19JRCk7Ci0KLQkvKiBDb25maWd1cmUgY29tbWFuZCByZWdpc3RlciBhcyBidXMgbWFzdGVyICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCBQQ0lfQ09NTUFORF9NQVNURVIpOwotCi0JLyogMjQwblMgUENJIGNsb2NrICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9MQVRFTkNZX1RJTUVSLCAxKTsKLQotCS8qIE5vIGVycm9yIHJlcG9ydGluZyAqLwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfRVJSRU4sIDApOwotCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZCgwLCBQQ0lfQlJER09QVDIsIDB4MDAwMDAxMDEpOwotCi19Ci0jZW5kaWYJCQkJLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV9tYXN0ZXJfaW5pdAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUKQotdm9pZCBwY2lfbWFzdGVyX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXVuc2lnbmVkIHNob3J0IHRlbXBfc2hvcnQ7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAgfCBXcml0ZSB0aGUgUG93ZXJQQzQ0MCBFUCBQQ0kgQ29uZmlndXJhdGlvbiByZWdzLgotCSAgfCAgIEVuYWJsZSBQb3dlclBDNDQwIEVQIHRvIGJlIGEgbWFzdGVyIG9uIHRoZSBQQ0kgYnVzIChQTU0pLgotCSAgfCAgIEVuYWJsZSBQb3dlclBDNDQwIEVQIHRvIGFjdCBhcyBhIFBDSSBtZW1vcnkgdGFyZ2V0IChQVE0pLgotCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwgJnRlbXBfc2hvcnQpOwotCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwKLQkJCSAgICAgIHRlbXBfc2hvcnQgfCBQQ0lfQ09NTUFORF9NQVNURVIgfAotCQkJICAgICAgUENJX0NPTU1BTkRfTUVNT1JZKTsKLX0KLSNlbmRpZgkJCQkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfTUFTVEVSX0lOSVQpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgaXNfcGNpX2hvc3QKLSAqCi0gKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHBjaSBzY2FuIHNob3VsZCBiZQotICoJcGVyZm9ybWVkLiBXaXRoIHZhcmlvdXMgaGFyZHdhcmUgZW52aXJvbm1lbnRzIChlc3BlY2lhbGx5IGNQQ0kgYW5kCi0gKglQUE1DKSBpdCdzIGluc3VmZmljaWVudCB0byBkZXBlbmQgb24gdGhlIHN0YXRlIG9mIHRoZSBhcmJpdGVyIGVuYWJsZQotICoJYml0IGluIHRoZSBzdHJhcCByZWdpc3Rlciwgb3IgZ2VuZXJpYyBob3N0L2FkYXB0ZXIgYXNzdW1wdGlvbnMuCi0gKgotICoJUmF0aGVyIHRoYW4gaGFyZC1jb2RlIGEgYmFkIGFzc3VtcHRpb24gaW4gdGhlIGdlbmVyYWwgNDQwIGNvZGUsIHRoZQotICoJNDQwIHBjaSBjb2RlIHJlcXVpcmVzIHRoZSBib2FyZCB0byBkZWNpZGUgYXQgcnVudGltZS4KLSAqCi0gKglSZXR1cm4gMCBmb3IgYWRhcHRlciBtb2RlLCBub24temVybyBmb3IgaG9zdCAobW9uYXJjaCkgbW9kZS4KLSAqCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi1pbnQgaXNfcGNpX2hvc3Qoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCS8qIENhY3R1cyBpcyBhbHdheXMgY29uZmlndXJlZCBhcyBob3N0LiAqLwotCXJldHVybiAoMSk7Ci19Ci0jZW5kaWYJCQkJLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCiB2b2lkIGh3X3dhdGNoZG9nX3Jlc2V0KHZvaWQpCiB7CiAJaW50IHZhbDsKQEAgLTUzMiwxMyArMzcyLDYgQEAKIAl1ZGVsYXkoNTAwKTsKIAlncGlvX3dyaXRlX2JpdChDT05GSUdfU1lTX0dQSU9fTElNRV9SU1QsIDEpOwogCi0JLyogTGltZSBtZW1vcnkgY2xvY2sgYWRqdXN0ZWQgdG8gMTAwTUh6ICovCi0Jb3V0X2JlMzIoKHZvaWQgKilDT05GSUdfU1lTX0xJTUVfU0RSQU1fQ0xPQ0ssIENPTkZJR19TWVNfTElNRV9DTE9DS18xMDBNSFopOwotCS8qIFdhaXQgdW50aWxsIHRpbWUgZXhwaXJlZC4gQmVjYXVzZSBvZiByZXF1aXJlbWVudHMgaW4gbGltZSBtYW51YWwgKi8KLQl1ZGVsYXkoMzAwKTsKLQkvKiBXcml0ZSBsaW1lIGNvbnRyb2xsZXIgbWVtb3J5IHBhcmFtZXRlcnMgKi8KLQlvdXRfYmUzMigodm9pZCAqKUNPTkZJR19TWVNfTElNRV9NTVIsIENPTkZJR19TWVNfTElNRV9NTVJfVkFMVUUpOwotCiAJbWI4NjJ4eC53aW5TaXplWCA9IDY0MDsKIAltYjg2Mnh4LndpblNpemVZID0gNDgwOwogCW1iODYyeHguZ2RmQnl0ZXNQUCA9IDI7CmRpZmYgLS1naXQgYS9ib2FyZC9sd21vbjUvdS1ib290LmxkcyBiL2JvYXJkL2x3bW9uNS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWVjNTZiLi4wMDAwMDAwCi0tLSBhL2JvYXJkL2x3bW9uNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAuYm9vdHBnIDB4RkZGRkYwMDAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSguYm9vdHBnKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLQotICBwcGNlbnZfYXNzZXJ0ID0gQVNTRVJUKC4gPCAweEZGRkY4MDAwLCAiLmJzcyBzZWN0aW9uIHRvbyBiaWcsIG92ZXJsYXBzIC5wcGNlbnYgc2VjdGlvbi4gUGxlYXNlIHVwZGF0ZSB5b3VyIGNvbmZndXJhdGlvbjogQ09ORklHX1NZU19NT05JVE9SX0JBU0UsIENPTkZJR19TWVNfTU9OSVRPUl9MRU4gYW5kIFRFWFRfQkFTRSBtYXkgbmVlZCB0byBiZSBtb2RpZmllZC4iKTsKLQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbWwyL01ha2VmaWxlIGIvYm9hcmQvbWwyL01ha2VmaWxlCmluZGV4IDJhOTM2NjYuLjU5NjQ0ZGIgMTAwNjQ0Ci0tLSBhL2JvYXJkL21sMi9NYWtlZmlsZQorKysgYi9ib2FyZC9tbDIvTWFrZWZpbGUKQEAgLTMzLDcgKzMzLDcgQEAKIFNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL21sMi9jb25maWcubWsgYi9ib2FyZC9tbDIvY29uZmlnLm1rCmluZGV4IDQxMTE4ZDUuLjVlMGJkYWUgMTAwNjQ0Ci0tLSBhL2JvYXJkL21sMi9jb25maWcubWsKKysrIGIvYm9hcmQvbWwyL2NvbmZpZy5tawpAQCAtMjcsMyArMjcsNiBAQAogCiAjVEVYVF9CQVNFID0gMHhGRkZFMDAwMAogVEVYVF9CQVNFID0gMHgxODAwMDAwMAorCisjIFVzZSBib2FyZCBzcGVjaWZpYyBsaW5rZXIgc2NyaXB0CitMRFNDUklQVCA6PSAkKFNSQ1RSRUUpL2JvYXJkL21sMi91LWJvb3QubGRzCmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvbWlwNDA1L01ha2VmaWxlIGIvYm9hcmQvbXBsL21pcDQwNS9NYWtlZmlsZQppbmRleCA1M2JmODQ2Li4xOGE4ZDg2IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvbWlwNDA1L01ha2VmaWxlCisrKyBiL2JvYXJkL21wbC9taXA0MDUvTWFrZWZpbGUKQEAgLTM4LDcgKzM4LDcgQEAKIFNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9taXA0MDUvbWlwNDA1LmMgYi9ib2FyZC9tcGwvbWlwNDA1L21pcDQwNS5jCmluZGV4IDQ5NWU5YmQuLmFmM2E5OGEgMTAwNjQ0Ci0tLSBhL2JvYXJkL21wbC9taXA0MDUvbWlwNDA1LmMKKysrIGIvYm9hcmQvbXBsL21pcDQwNS9taXA0MDUuYwpAQCAtNzA2LDE3ICs3MDYsNiBAQAogfQogCiAKLSNpZmRlZiBDT05GSUdfUE9TVAotLyoKLSAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cwotICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCi0gKi8KLWludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQotewotCXJldHVybiAwOwkvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLwotfQotI2VuZGlmCi0KIGV4dGVybiBpbnQgbWtfZGF0ZSAoY2hhciAqLCBzdHJ1Y3QgcnRjX3RpbWUgKik7CiAKIGludCBsYXN0X3N0YWdlX2luaXQgKHZvaWQpCmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvbWlwNDA1L3UtYm9vdC5sZHMgYi9ib2FyZC9tcGwvbWlwNDA1L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOGJlZDAuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbXBsL21pcDQwNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGJvYXJkL21wbC9taXA0MDUvaW5pdC5vCSguYm9vdHBnKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL21wbC9taXA0MDUvaW5pdC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2tnZGIubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC90cmFwcy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2ludGVycnVwdHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC80eHhfdWFydC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCi0gICAgZHJpdmVycy9uZXQvNHh4X2VuZXQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLS8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCi0vKiAgICBjb21tb24vZW52X2VtYmVkZGVkLm8oLnRleHQpKi8KLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9tcGwvcGlwNDA1L01ha2VmaWxlIGIvYm9hcmQvbXBsL3BpcDQwNS9NYWtlZmlsZQppbmRleCA1OTBjN2RhLi43NzRiNTlmIDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvcGlwNDA1L01ha2VmaWxlCisrKyBiL2JvYXJkL21wbC9waXA0MDUvTWFrZWZpbGUKQEAgLTQxLDcgKzQxLDcgQEAKIFNPQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKFNPQkpTKSkKIAogJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCi0JJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSlMpICQoU09CSlMpCiAKIGNsZWFuOgogCXJtIC1mICQoU09CSlMpICQoT0JKUykKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC9waXA0MDUvdS1ib290LmxkcyBiL2JvYXJkL21wbC9waXA0MDUvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIyOTBkOC4uMDAwMDAwMAotLS0gYS9ib2FyZC9tcGwvcGlwNDA1L3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC9tcGwvcGlwNDA1L2luaXQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9rZ2RiLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvdHJhcHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvNHh4X3VhcnQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9jcHVfaW5pdC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L3NwZWVkLm8JKC50ZXh0KQotICAgIGNvbW1vbi9kbG1hbGxvYy5vCSgudGV4dCkKLSAgICBsaWJfZ2VuZXJpYy9jcmMzMi5vCQkoLnRleHQpCi0gICAgbGliX3BwYy9leHRhYmxlLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL3psaWIubwkJKC50ZXh0KQotCi0vKiAgICAuID0gZW52X29mZnNldDsqLwotLyogICAgY29tbW9uL2Vudl9lbWJlZGRlZC5vKC50ZXh0KSovCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmMgYi9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuYwppbmRleCA0ZDhiNTc5Li4xODM1Njc3IDEwMDY0NAotLS0gYS9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuYworKysgYi9ib2FyZC9tcGwvdmNtYTkvdmNtYTkuYwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bmV0ZGV2Lmg+Ci0jaW5jbHVkZSA8czNjMjQxMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAjaW5jbHVkZSA8c3RkaW9fZGV2Lmg+CiAjaW5jbHVkZSA8aTJjLmg+CiAKZGlmZiAtLWdpdCBhL2JvYXJkL21wbC92Y21hOS92Y21hOS5oIGIvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmgKaW5kZXggZjQ2ZTBlNC4uOTRmZDJmYSAxMDA2NDQKLS0tIGEvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmgKKysrIGIvYm9hcmQvbXBsL3ZjbWE5L3ZjbWE5LmgKQEAgLTI1LDcgKzI1LDcgQEAKICAqIEdsb2JhbCByb3V0aW5lcyB1c2VkIGZvciBWQ01BOQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8czNjMjQxMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAKIGV4dGVybiBpbnQgIG1lbV90ZXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgcmFtc2l6ZSxpbnQgbW9kZSk7CiAKQEAgLTExOCwxMyArMTE4LDEzIEBACiAKIC8qIFZDTUE5IFBMRCByZWdzaXRlcnMgKi8KIHR5cGVkZWYgc3RydWN0IHsKLQlTM0MyNFgwX1JFRzgJSUQ7Ci0JUzNDMjRYMF9SRUc4CU5JQzsKLQlTM0MyNFgwX1JFRzgJQ0FOOwotCVMzQzI0WDBfUkVHOAlNSVNDOwotCVMzQzI0WDBfUkVHOAlHUENEOwotCVMzQzI0WDBfUkVHOAlCT0FSRDsKLQlTM0MyNFgwX1JFRzgJU0RSQU07CisJdTgJSUQ7CisJdTgJTklDOworCXU4CUNBTjsKKwl1OAlNSVNDOworCXU4CUdQQ0Q7CisJdTgJQk9BUkQ7CisJdTgJU0RSQU07CiB9IC8qX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpKi8gVkNNQTlfUExEOwogCiAjZGVmaW5lIFZDTUE5X1BMRF9CQVNFCTB4MkMwMDAxMDAKZGlmZiAtLWdpdCBhL2JvYXJkL25ldHN0YWwvaGN1NC9oY3U0LmMgYi9ib2FyZC9uZXRzdGFsL2hjdTQvaGN1NC5jCmluZGV4IGJhM2U5YzMuLjhlZmJjMjMgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHN0YWwvaGN1NC9oY3U0LmMKKysrIGIvYm9hcmQvbmV0c3RhbC9oY3U0L2hjdTQuYwpAQCAtMTc0LDE3ICsxNzQsNiBAQAogCXJldHVybiBkcmFtX3NpemU7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QT1NUKQotLyoKLSAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cwotICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCi0gKi8KLWludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQotewotCXJldHVybiAwOwkvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLwotfQotI2VuZGlmIC8qIENPTkZJR19QT1NUICovCi0KICNpZiBkZWZpbmVkKENPTkZJR19PRl9MSUJGRFQpICYmIGRlZmluZWQoQ09ORklHX09GX0JPQVJEX1NFVFVQKQogdm9pZCBmdF9ib2FyZF9zZXR1cCh2b2lkICpibG9iLCBiZF90ICpiZCkKIHsKZGlmZiAtLWdpdCBhL2JvYXJkL25ldHN0YWwvaGN1NC91LWJvb3QubGRzIGIvYm9hcmQvbmV0c3RhbC9oY3U0L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NDhlYzMuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbmV0c3RhbC9oY3U0L3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICAgICAgOiB7Ci0gICAgLyogVGhlIHN0YXJ0Lm8gZmlsZSBpbmNsdWRlcyB0aGUgaW5pdGlhbCBqdW1wIHZlY3RvciB0aGF0Ci0gICAgICAgbXVzdCBiZSBsb2NhdGVkIGluIHRoZSBiZWdpbm5pbmcuIEl0IGlzIHRoZSBiYXNpYyBydW4tCi0gICAgICAgdGltZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGFsbCBvdGhlciBmdW5jdGlvbnMuICovCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotLyogICAgLiA9IGVudl9vZmZzZXQ7Ki8KLS8qICAgIGNvbW1vbi9lbnZfZW1iZWRkZWQubygudGV4dCkqLwotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL25ldHN0YWwvaGN1NS9oY3U1LmMgYi9ib2FyZC9uZXRzdGFsL2hjdTUvaGN1NS5jCmluZGV4IDk0NmMzZjMuLmM1NDVjYzAgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHN0YWwvaGN1NS9oY3U1LmMKKysrIGIvYm9hcmQvbmV0c3RhbC9oY3U1L2hjdTUuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxwcGM0NDAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vNHh4X3BjaS5oPgorCiAjaW5jbHVkZSAgIi4uL2NvbW1vbi9ubS5oIgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKQEAgLTM3NywxMjEgKzM3OSwxNyBAQAogfQogCiAvKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKgotICovCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JaWYgKCFib2FyZF93aXRoX3BjaSgpKSB7IHJldHVybjsgfQotCS8qCi0JICogU2V0IHVwIERpcmVjdCBNTUlPIHJlZ2lzdGVycwotCSAqCi0JICogUG93ZXJQQzQ0MEVQWCBQQ0kgTWFzdGVyIGNvbmZpZ3VyYXRpb24uCi0JICogTWFwIG9uZSAxR2lnIHJhbmdlIG9mIFBMQi9wcm9jZXNzb3IgYWRkcmVzc2VzIHRvIFBDSSBtZW1vcnkgc3BhY2UuCi0JICogICBQTEIgYWRkcmVzcyAweEEwMDAwMDAwLTB4REZGRkZGRkYgPT0+IFBDSSBhZGRyZXNzCi0JICoJCSAgMHhBMDAwMDAwMC0weERGRkZGRkZGCi0JICogICBVc2UgYnl0ZSByZXZlcnNlZCBvdXQgcm91dGluZXMgdG8gaGFuZGxlIGVuZGlhbmVzcy4KLQkgKiBNYWtlIHRoaXMgcmVnaW9uIG5vbi1wcmVmZXRjaGFibGUuCi0JICovCi0JLyogUE1NMCBNYXNrL0F0dHJpYnV0ZSAtIGRpc2FibGVkIGI0IHNldHRpbmcgKi8KLQlvdXQzMnIoUENJTDBfUE1NME1BLCAweDAwMDAwMDAwKTsKLQlvdXQzMnIoUENJTDBfUE1NMExBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsJLyogUE1NMCBMb2NhbCBBZGRyZXNzICovCi0JLyogUE1NMCBQQ0kgTG93IEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMFBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsKLQlvdXQzMnIoUENJTDBfUE1NMFBDSUhBLCAweDAwMDAwMDAwKTsJLyogUE1NMCBQQ0kgSGlnaCBBZGRyZXNzICovCi0JLyogNTEyTSArIE5vIHByZWZldGNoaW5nLCBhbmQgZW5hYmxlIHJlZ2lvbiAqLwotCW91dDMycihQQ0lMMF9QTU0wTUEsIDB4RTAwMDAwMDEpOwotCi0JLyogUE1NMCBNYXNrL0F0dHJpYnV0ZSAtIGRpc2FibGVkIGI0IHNldHRpbmcgKi8KLQlvdXQzMnIoUENJTDBfUE1NMU1BLCAweDAwMDAwMDAwKTsKLQlvdXQzMnIoUENJTDBfUE1NMUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFMik7CS8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLwotCS8qIFBNTTAgUENJIExvdyBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFQQ0lMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRTIpOwotCW91dDMycihQQ0lMMF9QTU0xUENJSEEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KLQkvKiA1MTJNICsgTm8gcHJlZmV0Y2hpbmcsIGFuZCBlbmFibGUgcmVnaW9uICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFNQSwgMHhFMDAwMDAwMSk7Ci0KLQlvdXQzMnIoUENJTDBfUFRNMU1TLCAweDAwMDAwMDAxKTsJLyogTWVtb3J5IFNpemUvQXR0cmlidXRlICovCi0Jb3V0MzJyKFBDSUwwX1BUTTFMQSwgMCk7CS8qIExvY2FsIEFkZHIuIFJlZyAqLwotCW91dDMycihQQ0lMMF9QVE0yTVMsIDApOwkvKiBNZW1vcnkgU2l6ZS9BdHRyaWJ1dGUgKi8KLQlvdXQzMnIoUENJTDBfUFRNMkxBLCAwKTsJLyogTG9jYWwgQWRkci4gUmVnICovCi0KLQkvKgotCSAqIFNldCB1cCBDb25maWd1cmF0aW9uIHJlZ2lzdGVycwotCSAqLwotCi0JLyogUHJvZ3JhbSB0aGUgYm9hcmQncyBzdWJzeXN0ZW0gaWQvdmVuZG9yIGlkICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAotCQkJICAgICAgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX1NVQlNZU1RFTV9JRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0lEKTsKLQotCS8qIENvbmZpZ3VyZSBjb21tYW5kIHJlZ2lzdGVyIGFzIGJ1cyBtYXN0ZXIgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsIFBDSV9DT01NQU5EX01BU1RFUik7Ci0KLQkvKiAyNDBuUyBQQ0kgY2xvY2sgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0xBVEVOQ1lfVElNRVIsIDEpOwotCi0JLyogTm8gZXJyb3IgcmVwb3J0aW5nICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9FUlJFTiwgMCk7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKDAsIFBDSV9CUkRHT1BUMiwgMHgwMDAwMDEwMSk7Ci19Ci0KLS8qCi0gKiAgcGNpX21hc3Rlcl9pbml0Ci0gKgorICogT3ZlcnJpZGUgd2VhayBkZWZhdWx0IHBjaV9tYXN0ZXJfaW5pdCgpCiAgKi8KIHZvaWQgcGNpX21hc3Rlcl9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKLQl1bnNpZ25lZCBzaG9ydCB0ZW1wX3Nob3J0OwotCWlmICghYm9hcmRfd2l0aF9wY2koKSkgeyByZXR1cm47IH0KKwlpZiAoIWJvYXJkX3dpdGhfcGNpKCkpCisJCXJldHVybjsKIAotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogV3JpdGUgdGhlIFBvd2VyUEM0NDAgRVAgUENJIENvbmZpZ3VyYXRpb24gcmVncy4KLQkgKiAgIEVuYWJsZSBQb3dlclBDNDQwIEVQIHRvIGJlIGEgbWFzdGVyIG9uIHRoZSBQQ0kgYnVzIChQTU0pLgotCSAqICAgRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYWN0IGFzIGEgUENJIG1lbW9yeSB0YXJnZXQgKFBUTSkuCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsICZ0ZW1wX3Nob3J0KTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsCi0JCQkgICAgICB0ZW1wX3Nob3J0IHwgUENJX0NPTU1BTkRfTUFTVEVSIHwKLQkJCSAgICAgIFBDSV9DT01NQU5EX01FTU9SWSk7Ci19Ci0KLS8qCi0gKiAgaXNfcGNpX2hvc3QKLSAqCi0gKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHBjaSBzY2FuIHNob3VsZCBiZQotICoJcGVyZm9ybWVkLiBXaXRoIHZhcmlvdXMgaGFyZHdhcmUgZW52aXJvbm1lbnRzIChlc3BlY2lhbGx5IGNQQ0kgYW5kCi0gKglQUE1DKSBpdCdzIGluc3VmZmljaWVudCB0byBkZXBlbmQgb24gdGhlIHN0YXRlIG9mIHRoZSBhcmJpdGVyIGVuYWJsZQotICoJYml0IGluIHRoZSBzdHJhcCByZWdpc3Rlciwgb3IgZ2VuZXJpYyBob3N0L2FkYXB0ZXIgYXNzdW1wdGlvbnMuCi0gKgotICoJUmF0aGVyIHRoYW4gaGFyZC1jb2RlIGEgYmFkIGFzc3VtcHRpb24gaW4gdGhlIGdlbmVyYWwgNDQwIGNvZGUsIHRoZQotICoJNDQwIHBjaSBjb2RlIHJlcXVpcmVzIHRoZSBib2FyZCB0byBkZWNpZGUgYXQgcnVudGltZS4KLSAqCi0gKglSZXR1cm4gMCBmb3IgYWRhcHRlciBtb2RlLCBub24temVybyBmb3IgaG9zdCAobW9uYXJjaCkgbW9kZS4KLSAqCi0gKi8KLWludCBpc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JcmV0dXJuIDE7CisJX19wY2lfbWFzdGVyX2luaXQoaG9zZSk7CiB9CiAjZW5kaWYJIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1BPU1QpCi0vKgotICogUmV0dXJucyAxIGlmIGtleXMgcHJlc3NlZCB0byBzdGFydCB0aGUgcG93ZXItb24gbG9uZy1ydW5uaW5nIHRlc3RzCi0gKiBDYWxsZWQgZnJvbSBib2FyZF9pbml0X2YoKS4KLSAqLwotaW50IHBvc3RfaG90a2V5c19wcmVzc2VkKHZvaWQpCi17Ci0JcmV0dXJuIDA7CS8qIE5vIGhvdGtleXMgc3VwcG9ydGVkICovCi19Ci0jZW5kaWYgLyogQ09ORklHX1BPU1QgKi8KLQogI2lmIGRlZmluZWQoQ09ORklHX09GX0xJQkZEVCkgJiYgZGVmaW5lZChDT05GSUdfT0ZfQk9BUkRfU0VUVVApCiB2b2lkIGZ0X2JvYXJkX3NldHVwKHZvaWQgKmJsb2IsIGJkX3QgKmJkKQogewpkaWZmIC0tZ2l0IGEvYm9hcmQvbmV0c3RhbC9oY3U1L3UtYm9vdC5sZHMgYi9ib2FyZC9uZXRzdGFsL2hjdTUvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjNmU3MC4uMDAwMDAwMAotLS0gYS9ib2FyZC9uZXRzdGFsL2hjdTUvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDQKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLQotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAuYm9vdHBnIDB4RkZGRkYwMDAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSguYm9vdHBnKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCQl9Ci0gIC5yZWxhLmRhdGEgICAgIDogeyAqKC5yZWxhLmRhdGEpCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpCX0KLSAgLnJlbGEucm9kYXRhICAgOiB7ICooLnJlbGEucm9kYXRhKQl9Ci0gIC5yZWwuZ290ICAgICAgIDogeyAqKC5yZWwuZ290KQkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJCX0KLSAgLnJlbGEuYnNzICAgICAgOiB7ICooLnJlbGEuYnNzKQkJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQkJfQotICAuaW5pdCAgICAgICAgICA6IHsgKiguaW5pdCkJfQotICAucGx0IDogeyAqKC5wbHQpIH0KLSAgLnRleHQgICAgICA6Ci0gIHsKLSAgICAvKiBXQVJOSU5HIC0gdGhlIGZvbGxvd2luZyBpcyBoYW5kLW9wdGltaXplZCB0byBmaXQgd2l0aGluCSovCi0gICAgLyogdGhlIHNlY3RvciBsYXlvdXQgb2Ygb3VyIGZsYXNoIGNoaXBzIQlYWFggRklYTUUgWFhYCSovCi0KLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLQotICBwcGNlbnZfYXNzZXJ0ID0gQVNTRVJUKC4gPCAweEZGRkZCMDAwLCAiLmJzcyBzZWN0aW9uIHRvbyBiaWcsIG92ZXJsYXBzIC5wcGNlbnYgc2VjdGlvbi4gUGxlYXNlIHVwZGF0ZSB5b3VyIGNvbmZndXJhdGlvbjogQ09ORklHX1NZU19NT05JVE9SX0JBU0UsIENPTkZJR19TWVNfTU9OSVRPUl9MRU4gYW5kIFRFWFRfQkFTRSBtYXkgbmVlZCB0byBiZSBtb2RpZmllZC4iKTsKLQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvbmV0c3RhbC9tY3UyNS9tY3UyNS5jIGIvYm9hcmQvbmV0c3RhbC9tY3UyNS9tY3UyNS5jCmluZGV4IDk0NWQ3OWEuLmM2NmFiOTcgMTAwNjQ0Ci0tLSBhL2JvYXJkL25ldHN0YWwvbWN1MjUvbWN1MjUuYworKysgYi9ib2FyZC9uZXRzdGFsL21jdTI1L21jdTI1LmMKQEAgLTE3MywxNyArMTczLDYgQEAKIAlyZXR1cm4gZHJhbV9zaXplOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUE9TVCkKLS8qCi0gKiBSZXR1cm5zIDEgaWYga2V5cyBwcmVzc2VkIHRvIHN0YXJ0IHRoZSBwb3dlci1vbiBsb25nLXJ1bm5pbmcgdGVzdHMKLSAqIENhbGxlZCBmcm9tIGJvYXJkX2luaXRfZigpLgotICovCi1pbnQgcG9zdF9ob3RrZXlzX3ByZXNzZWQodm9pZCkKLXsKLQlyZXR1cm4gMDsJLyogTm8gaG90a2V5cyBzdXBwb3J0ZWQgKi8KLX0KLSNlbmRpZiAvKiBDT05GSUdfUE9TVCAqLwotCiAjaWYgZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkKIHZvaWQgZnRfYm9hcmRfc2V0dXAodm9pZCAqYmxvYiwgYmRfdCAqYmQpCiB7CmRpZmYgLS1naXQgYS9ib2FyZC9uZXRzdGFsL21jdTI1L3UtYm9vdC5sZHMgYi9ib2FyZC9uZXRzdGFsL21jdTI1L3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZjMzNjEuLjAwMDAwMDAKLS0tIGEvYm9hcmQvbmV0c3RhbC9tY3UyNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAtMjAwNAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgICAgIDogewotICAgIC8qIFRoZSBzdGFydC5vIGZpbGUgaW5jbHVkZXMgdGhlIGluaXRpYWwganVtcCB2ZWN0b3IgdGhhdAotICAgICAgIG11c3QgYmUgbG9jYXRlZCBpbiB0aGUgYmVnaW5uaW5nLiBJdCBpcyB0aGUgYmFzaWMgcnVuLQotICAgICAgIHRpbWUgZnVuY3Rpb24gdGhhdCBjYWxscyBhbGwgb3RoZXIgZnVuY3Rpb25zLiAqLwotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLS8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCi0vKiAgICBjb21tb24vZW52X2VtYmVkZGVkLm8oLnRleHQpKi8KLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9uZXR0YS9uZXR0YS5jIGIvYm9hcmQvbmV0dGEvbmV0dGEuYwppbmRleCAzOGM5ZDg5Li41YzkzNWY0IDEwMDY0NAotLS0gYS9ib2FyZC9uZXR0YS9uZXR0YS5jCisrKyBiL2JvYXJkL25ldHRhL25ldHRhLmMKQEAgLTU2NCwxNyArNTY0LDYgQEAKIAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE9TVAotLyoKLSAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cwotICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCi0gKi8KLWludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQotewotCXJldHVybiAwOwkvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLwotfQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfSFdfV0FUQ0hET0cKIAogdm9pZCBod193YXRjaGRvZ19yZXNldCh2b2lkKQpkaWZmIC0tZ2l0IGEvYm9hcmQvcGNzNDQwZXAvcGNzNDQwZXAuYyBiL2JvYXJkL3BjczQ0MGVwL3BjczQ0MGVwLmMKaW5kZXggYjcwODI3ZS4uY2UxZTYxNiAxMDA2NDQKLS0tIGEvYm9hcmQvcGNzNDQwZXAvcGNzNDQwZXAuYworKysgYi9ib2FyZC9wY3M0NDBlcC9wY3M0NDBlcC5jCkBAIC01NTEsMTY2ICs1NTEsNiBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV9wcmVfaW5pdAotICoKLSAqICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGp1c3QgcHJpb3IgdG8gcmVnaXN0ZXJpbmcgdGhlIGhvc2UgYW5kIGdpdmVzCi0gKiAgdGhlIGJvYXJkIHRoZSBvcHBvcnR1bml0eSB0byBjaGVjayB0aGluZ3MuIFJldHVybmluZyBhIHZhbHVlIG9mIHplcm8KLSAqICBpbmRpY2F0ZXMgdGhhdCB0aGluZ3MgYXJlIGJhZCAmIFBDSSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgYWJvcnRlZC4KLSAqCi0gKglEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCi0gKgkoYWRkIHJlZ2lvbnMsIG92ZXJyaWRlIGRlZmF1bHQgYWNjZXNzIHJvdXRpbmVzLCBldGMpIG9yIHBlcmZvcm0KLSAqCWNlcnRhaW4gcHJlLWluaXRpYWxpemF0aW9uIGFjdGlvbnMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi1pbnQgcGNpX3ByZV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICB8IFNldCBwcmlvcml0eSBmb3IgYWxsIFBMQjMgZGV2aWNlcyB0byAwLgotCSAgfCBTZXQgUExCMyBhcmJpdGVyIHRvIGZhaXIgbW9kZS4KLQkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQltZnNkcihTRDBfQU1QMSwgYWRkcik7Ci0JbXRzZHIoU0QwX0FNUDEsIChhZGRyICYgMHgwMDAwMDBGRikgfCAweDAwMDBGRjAwKTsKLQlhZGRyID0gbWZkY3IoUExCM19BQ1IpOwotCW10ZGNyKFBMQjNfQUNSLCBhZGRyIHwgMHg4MDAwMDAwMCk7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICB8IFNldCBwcmlvcml0eSBmb3IgYWxsIFBMQjQgZGV2aWNlcyB0byAwLgotCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW1mc2RyKFNEMF9BTVAwLCBhZGRyKTsKLQltdHNkcihTRDBfQU1QMCwgKGFkZHIgJiAweDAwMDAwMEZGKSB8IDB4MDAwMEZGMDApOwotCWFkZHIgPSBtZmRjcihQTEI0X0FDUikgfCAweGEwMDAwMDAwOwkvKiBXYXMgMHg4LS0tLSAqLwotCW10ZGNyKFBMQjRfQUNSLCBhZGRyKTsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgIHwgU2V0IE5lYnVsYSBQTEI0IGFyYml0ZXIgdG8gZmFpciBtb2RlLgotCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCS8qIFNlZ21lbnQwICovCi0JYWRkciA9IChtZmRjcihQTEIwX0FDUikgJiB+UExCMF9BQ1JfUFBNX01BU0spIHwgUExCMF9BQ1JfUFBNX0ZBSVI7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX0hCVV9NQVNLKSB8IFBMQjBfQUNSX0hCVV9FTkFCTEVEOwotCWFkZHIgPSAoYWRkciAmIH5QTEIwX0FDUl9SRFBfTUFTSykgfCBQTEIwX0FDUl9SRFBfNERFRVA7Ci0JYWRkciA9IChhZGRyICYgflBMQjBfQUNSX1dSUF9NQVNLKSB8IFBMQjBfQUNSX1dSUF8yREVFUDsKLQltdGRjcihQTEIwX0FDUiwgYWRkcik7Ci0KLQkvKiBTZWdtZW50MSAqLwotCWFkZHIgPSAobWZkY3IoUExCMV9BQ1IpICYgflBMQjFfQUNSX1BQTV9NQVNLKSB8IFBMQjFfQUNSX1BQTV9GQUlSOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9IQlVfTUFTSykgfCBQTEIxX0FDUl9IQlVfRU5BQkxFRDsKLQlhZGRyID0gKGFkZHIgJiB+UExCMV9BQ1JfUkRQX01BU0spIHwgUExCMV9BQ1JfUkRQXzRERUVQOwotCWFkZHIgPSAoYWRkciAmIH5QTEIxX0FDUl9XUlBfTUFTSykgfCBQTEIxX0FDUl9XUlBfMkRFRVA7Ci0JbXRkY3IoUExCMV9BQ1IsIGFkZHIpOwotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiBTZXQgdXAgRGlyZWN0IE1NSU8gcmVnaXN0ZXJzCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgIHwgUG93ZXJQQzQ0MCBFUCBQQ0kgTWFzdGVyIGNvbmZpZ3VyYXRpb24uCi0JICB8IE1hcCBvbmUgMUdpZyByYW5nZSBvZiBQTEIvcHJvY2Vzc29yIGFkZHJlc3NlcyB0byBQQ0kgbWVtb3J5IHNwYWNlLgotCSAgfCAgIFBMQiBhZGRyZXNzIDB4QTAwMDAwMDAtMHhERkZGRkZGRiA9PT4gUENJIGFkZHJlc3MgMHhBMDAwMDAwMC0weERGRkZGRkZGCi0JICB8ICAgVXNlIGJ5dGUgcmV2ZXJzZWQgb3V0IHJvdXRpbmVzIHRvIGhhbmRsZSBlbmRpYW5lc3MuCi0JICB8IE1ha2UgdGhpcyByZWdpb24gbm9uLXByZWZldGNoYWJsZS4KLQkgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0Jb3V0MzJyKFBDSUwwX1BNTTBNQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgTWFzay9BdHRyaWJ1dGUgLSBkaXNhYmxlZCBiNCBzZXR0aW5nICovCi0Jb3V0MzJyKFBDSUwwX1BNTTBMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRSk7CS8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0wUENJTEEsIENPTkZJR19TWVNfUENJX01FTUJBU0UpOwkvKiBQTU0wIFBDSSBMb3cgQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0wUENJSEEsIDB4MDAwMDAwMDApOwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NME1BLCAweEUwMDAwMDAxKTsJLyogNTEyTSArIE5vIHByZWZldGNoaW5nLCBhbmQgZW5hYmxlIHJlZ2lvbiAqLwotCi0Jb3V0MzJyKFBDSUwwX1BNTTFNQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgTWFzay9BdHRyaWJ1dGUgLSBkaXNhYmxlZCBiNCBzZXR0aW5nICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRTIpOwkvKiBQTU0wIExvY2FsIEFkZHJlc3MgKi8KLQlvdXQzMnIoUENJTDBfUE1NMVBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFMik7CS8qIFBNTTAgUENJIExvdyBBZGRyZXNzICovCi0Jb3V0MzJyKFBDSUwwX1BNTTFQQ0lIQSwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgUENJIEhpZ2ggQWRkcmVzcyAqLwotCW91dDMycihQQ0lMMF9QTU0xTUEsIDB4RTAwMDAwMDEpOwkvKiA1MTJNICsgTm8gcHJlZmV0Y2hpbmcsIGFuZCBlbmFibGUgcmVnaW9uICovCi0KLQlvdXQzMnIoUENJTDBfUFRNMU1TLCAweDAwMDAwMDAxKTsJLyogTWVtb3J5IFNpemUvQXR0cmlidXRlICovCi0Jb3V0MzJyKFBDSUwwX1BUTTFMQSwgMCk7CS8qIExvY2FsIEFkZHIuIFJlZyAqLwotCW91dDMycihQQ0lMMF9QVE0yTVMsIDApOwkvKiBNZW1vcnkgU2l6ZS9BdHRyaWJ1dGUgKi8KLQlvdXQzMnIoUENJTDBfUFRNMkxBLCAwKTsJLyogTG9jYWwgQWRkci4gUmVnICovCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFNldCB1cCBDb25maWd1cmF0aW9uIHJlZ2lzdGVycwotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0JLyogUHJvZ3JhbSB0aGUgYm9hcmQncyBzdWJzeXN0ZW0gaWQvdmVuZG9yIGlkICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAotCQkJICAgICAgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEKTsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX1NVQlNZU1RFTV9JRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0lEKTsKLQotCS8qIENvbmZpZ3VyZSBjb21tYW5kIHJlZ2lzdGVyIGFzIGJ1cyBtYXN0ZXIgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0NPTU1BTkQsIFBDSV9DT01NQU5EX01BU1RFUik7Ci0KLQkvKiAyNDBuUyBQQ0kgY2xvY2sgKi8KLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0xBVEVOQ1lfVElNRVIsIDEpOwotCi0JLyogTm8gZXJyb3IgcmVwb3J0aW5nICovCi0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9FUlJFTiwgMCk7Ci0KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKDAsIFBDSV9CUkRHT1BUMiwgMHgwMDAwMDEwMSk7Ci0KLX0KLSNlbmRpZgkJCQkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX21hc3Rlcl9pbml0Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfTUFTVEVSX0lOSVQpCi12b2lkIHBjaV9tYXN0ZXJfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JdW5zaWduZWQgc2hvcnQgdGVtcF9zaG9ydDsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0JICB8IFdyaXRlIHRoZSBQb3dlclBDNDQwIEVQIFBDSSBDb25maWd1cmF0aW9uIHJlZ3MuCi0JICB8ICAgRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYmUgYSBtYXN0ZXIgb24gdGhlIFBDSSBidXMgKFBNTSkuCi0JICB8ICAgRW5hYmxlIFBvd2VyUEM0NDAgRVAgdG8gYWN0IGFzIGEgUENJIG1lbW9yeSB0YXJnZXQgKFBUTSkuCi0JICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCAmdGVtcF9zaG9ydCk7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELAotCQkJICAgICAgdGVtcF9zaG9ydCB8IFBDSV9DT01NQU5EX01BU1RFUiB8Ci0JCQkgICAgICBQQ0lfQ09NTUFORF9NRU1PUlkpOwotfQotI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9NQVNURVJfSU5JVCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBpc19wY2lfaG9zdAotICoKLSAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCi0gKglwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKLSAqCVBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCi0gKgliaXQgaW4gdGhlIHN0cmFwIHJlZ2lzdGVyLCBvciBnZW5lcmljIGhvc3QvYWRhcHRlciBhc3N1bXB0aW9ucy4KLSAqCi0gKglSYXRoZXIgdGhhbiBoYXJkLWNvZGUgYSBiYWQgYXNzdW1wdGlvbiBpbiB0aGUgZ2VuZXJhbCA0NDAgY29kZSwgdGhlCi0gKgk0NDAgcGNpIGNvZGUgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGRlY2lkZSBhdCBydW50aW1lLgotICoKLSAqCVJldHVybiAwIGZvciBhZGFwdGVyIG1vZGUsIG5vbi16ZXJvIGZvciBob3N0IChtb25hcmNoKSBtb2RlLgotICoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBpc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyogUENTNDQwRVAgaXMgYWx3YXlzIGNvbmZpZ3VyZWQgYXMgaG9zdC4gKi8KLQlyZXR1cm4gKDEpOwotfQotI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICBod193YXRjaGRvZ19yZXNldAogICoKICAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzZXQgKGtlZXAgYWxpdmUpIHRoZSB3YXRjaGRvZyB0aW1lcgpkaWZmIC0tZ2l0IGEvYm9hcmQvcHJvZHJpdmUvYWxwci9hbHByLmMgYi9ib2FyZC9wcm9kcml2ZS9hbHByL2FscHIuYwppbmRleCA1MTMzNWM0Li4wNjBlN2ViIDEwMDY0NAotLS0gYS9ib2FyZC9wcm9kcml2ZS9hbHByL2FscHIuYworKysgYi9ib2FyZC9wcm9kcml2ZS9hbHByL2FscHIuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPHBwYzR4eF9lbmV0Lmg+CiAjaW5jbHVkZSA8bWlpcGh5Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS80eHhfcGNpLmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCkBAIC0xNDQsODEgKzE0NSwyMyBAQAogCXJldHVybiAoMCk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX3ByZV9pbml0Ci0gKgotICogIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKLSAqICB0aGUgYm9hcmQgdGhlIG9wcG9ydHVuaXR5IHRvIGNoZWNrIHRoaW5ncy4gUmV0dXJuaW5nIGEgdmFsdWUgb2YgemVybwotICogIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgotICoKLSAqCURpZmZlcmVudCBib2FyZHMgbWF5IHdpc2ggdG8gY3VzdG9taXplIHRoZSBwY2kgY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqCShhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQotICoJY2VydGFpbiBwcmUtaW5pdGlhbGl6YXRpb24gYWN0aW9ucy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSApCisvKgorICogT3ZlcnJpZGUgd2VhayBwY2lfcHJlX2luaXQoKQorICovCitpbnQgcGNpX3ByZV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKLQl1bnNpZ25lZCBsb25nIHN0cmFwOwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKglUaGUgb2NvdGVhIGJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIHRoZSBob3N0ICYgcmVxdWlyZXMgdGhlCi0JICoJUENJIGFyYml0ZXIgdG8gYmUgZW5hYmxlZC4KLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQltZnNkcihTRFIwX1NEU1RQMSwgc3RyYXApOwotCWlmKCAoc3RyYXAgJiBTRFIwX1NEU1RQMV9QQUVfTUFTSykgPT0gMCApewotCQlwcmludGYoIlBDSTogU0RSMF9TVFJQMVslMDhsWF0gLSBQQ0kgQXJiaXRlciBkaXNhYmxlZC5cbiIsc3RyYXApOworCWlmIChfX3BjaV9wcmVfaW5pdChob3NlKSA9PSAwKQogCQlyZXR1cm4gMDsKLQl9CiAKIAkvKiBGUEdBIEluaXQgKi8KLQlhbHByX2ZwZ2FfaW5pdCAoKTsKKwlhbHByX2ZwZ2FfaW5pdCgpOwogCiAJcmV0dXJuIDE7CiB9Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBob3NlICkKLXsKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIERpc2FibGUgZXZlcnl0aGluZwotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDMyciggUENJTDBfUElNMFNBLCAwICk7IC8qIGRpc2FibGUgKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTFTQSwgMCApOyAvKiBkaXNhYmxlICovCi0Jb3V0MzJyKCBQQ0lMMF9QSU0yU0EsIDAgKTsgLyogZGlzYWJsZSAqLwotCW91dDMyciggUENJTDBfRVJPTUJBLCAwICk7IC8qIGRpc2FibGUgZXhwYW5zaW9uIHJvbSAqLwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiBNYXAgYWxsIG9mIFNEUkFNIHRvIFBDSSBhZGRyZXNzIDB4MDAwMF8wMDAwLiBOb3RlIHRoYXQgdGhlIDQ0MCBzdHJhcHBpbmcKLQkgKiBvcHRpb25zIHRvIG5vdCBzdXBwb3J0IHNpemVzIHN1Y2ggYXMgMTI4LzI1NiBNQi4KLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTBMQUwsIENPTkZJR19TWVNfU0RSQU1fQkFTRSApOwotCW91dDMyciggUENJTDBfUElNMExBSCwgMCApOwotCW91dDMyciggUENJTDBfUElNMFNBLCB+KGdkLT5yYW1fc2l6ZSAtIDEpIHwgMSApOwotCi0Jb3V0MzJyKCBQQ0lMMF9CQVIwLCAwICk7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZAotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDE2ciggUENJTDBfU0JTWVNWSUQsIENPTkZJR19TWVNfUENJX1NVQlNZU19WRU5ET1JJRCApOwotCW91dDE2ciggUENJTDBfU0JTWVNJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0RFVklDRUlEICk7Ci0KLQlvdXQxNnIoIFBDSUwwX0NNRCwgaW4xNnIoUENJTDBfQ01EKSB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUik7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIGlzX3BjaV9ob3N0CisgKiBPdmVycmlkZSB3ZWFrIGlzX3BjaV9ob3N0KCkKICAqCiAgKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGRldGVybWluZSBpZiBhIHBjaSBzY2FuIHNob3VsZCBiZQogICoJcGVyZm9ybWVkLiBXaXRoIHZhcmlvdXMgaGFyZHdhcmUgZW52aXJvbm1lbnRzIChlc3BlY2lhbGx5IGNQQ0kgYW5kCkBAIC0yMzIsOCArMTc1LDYgQEAKICAqCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi0KIHN0YXRpYyB2b2lkIHdhaXRfZm9yX3BjaV9yZWFkeSh2b2lkKQogewogCS8qCkBAIC0yODcsMTUgKzIyOCwzIEBACiAJb3V0MzJyKFBDSUwwX1BPTTFTQSwgfigweDEwMDAwMDAwIC0gMSkgfCAxKTsJLyogMjU2TUIgKyBlbmFibGUgcmVnaW9uICovCiB9CiAjZW5kaWYJCQkJLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUKSAqLwotCi0jaWZkZWYgQ09ORklHX1BPU1QKLS8qCi0gKiBSZXR1cm5zIDEgaWYga2V5cyBwcmVzc2VkIHRvIHN0YXJ0IHRoZSBwb3dlci1vbiBsb25nLXJ1bm5pbmcgdGVzdHMKLSAqIENhbGxlZCBmcm9tIGJvYXJkX2luaXRfZigpLgotICovCi1pbnQgcG9zdF9ob3RrZXlzX3ByZXNzZWQodm9pZCkKLXsKLQotCXJldHVybiAoY3RybGMoKSk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL3Byb2RyaXZlL2FscHIvdS1ib290LmxkcyBiL2JvYXJkL3Byb2RyaXZlL2FscHIvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYzM2Y5MS4uMDAwMDAwMAotLS0gYS9ib2FyZC9wcm9kcml2ZS9hbHByL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC5ib290cGcgMHhGRkZGRjAwMCA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC5ib290cGcpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvcHJvZHJpdmUvYWxwci9pbml0Lm8JKC50ZXh0KQotCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL3Byb2RyaXZlL3AzcDQ0MC9wM3A0NDAuYyBiL2JvYXJkL3Byb2RyaXZlL3AzcDQ0MC9wM3A0NDAuYwppbmRleCA5YTA3ODUyLi4wMjBmNjZkIDEwMDY0NAotLS0gYS9ib2FyZC9wcm9kcml2ZS9wM3A0NDAvcDNwNDQwLmMKKysrIGIvYm9hcmQvcHJvZHJpdmUvcDNwNDQwL3AzcDQ0MC5jCkBAIC0xNjUsNzcgKzE2NSw3IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgcGNpX3ByZV9pbml0Ci0gKgotICogIFRoaXMgcm91dGluZSBpcyBjYWxsZWQganVzdCBwcmlvciB0byByZWdpc3RlcmluZyB0aGUgaG9zZSBhbmQgZ2l2ZXMKLSAqICB0aGUgYm9hcmQgdGhlIG9wcG9ydHVuaXR5IHRvIGNoZWNrIHRoaW5ncy4gUmV0dXJuaW5nIGEgdmFsdWUgb2YgemVybwotICogIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgotICoKLSAqCURpZmZlcmVudCBib2FyZHMgbWF5IHdpc2ggdG8gY3VzdG9taXplIHRoZSBwY2kgY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqCShhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQotICoJY2VydGFpbiBwcmUtaW5pdGlhbGl6YXRpb24gYWN0aW9ucy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLWludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXVuc2lnbmVkIGxvbmcgc3RyYXA7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqCVRoZSBQM1A0NDAgYm9hcmQgaXMgYWx3YXlzIGNvbmZpZ3VyZWQgYXMgdGhlIGhvc3QgJiByZXF1aXJlcyB0aGUKLQkgKglQQ0kgYXJiaXRlciB0byBiZSBkaXNhYmxlZCBiZWNhdXNlIGl0J3MgYW4gUE1DIG1vZHVsZS4KLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlzdHJhcCA9IG1mZGNyKENQQzBfU1RSUDEpOwotCWlmIChzdHJhcCAmIDB4MDAxMDAwMDApIHsKLQkJcHJpbnRmKCJQQ0k6IENQQzBfU1RSUDFbUEFFXSBzZXQuXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYJLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCi17Ci0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiBEaXNhYmxlIGV2ZXJ5dGhpbmcKLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlvdXQzMnIoUENJTDBfUElNMFNBLCAwKTsJLyogZGlzYWJsZSAqLwotCW91dDMycihQQ0lMMF9QSU0xU0EsIDApOwkvKiBkaXNhYmxlICovCi0Jb3V0MzJyKFBDSUwwX1BJTTJTQSwgMCk7CS8qIGRpc2FibGUgKi8KLQlvdXQzMnIoUENJTDBfRVJPTUJBLCAwKTsJLyogZGlzYWJsZSBleHBhbnNpb24gcm9tICovCi0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIE1hcCBhbGwgb2YgU0RSQU0gdG8gUENJIGFkZHJlc3MgMHgwMDAwXzAwMDAuIE5vdGUgdGhhdCB0aGUgNDQwIHN0cmFwcGluZwotCSAqIG9wdGlvbnMgdG8gbm90IHN1cHBvcnQgc2l6ZXMgc3VjaCBhcyAxMjgvMjU2IE1CLgotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDMycihQQ0lMMF9QSU0wTEFMLCBDT05GSUdfU1lTX1NEUkFNX0JBU0UpOwotCW91dDMycihQQ0lMMF9QSU0wTEFILCAwKTsKLQlvdXQzMnIoUENJTDBfUElNMFNBLCB+KGdkLT5yYW1fc2l6ZSAtIDEpIHwgMSk7Ci0KLQlvdXQzMnIoUENJTDBfQkFSMCwgMCk7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZAotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDE2cihQQ0lMMF9TQlNZU1ZJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEKTsKLQlvdXQxNnIoUENJTDBfU0JTWVNJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0RFVklDRUlEKTsKLQotCW91dDE2cihQQ0lMMF9DTUQsIGluMTZyKFBDSUwwX0NNRCkgfCBQQ0lfQ09NTUFORF9NRU1PUlkpOwotfQotI2VuZGlmCQkJCS8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBpc19wY2lfaG9zdAorICogT3ZlcnJpZGUgd2VhayBpc19wY2lfaG9zdCgpCiAgKgogICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgaWYgYSBwY2kgc2NhbiBzaG91bGQgYmUKICAqCXBlcmZvcm1lZC4gV2l0aCB2YXJpb3VzIGhhcmR3YXJlIGVudmlyb25tZW50cyAoZXNwZWNpYWxseSBjUENJIGFuZApkaWZmIC0tZ2l0IGEvYm9hcmQvcHJvZHJpdmUvcDNwNDQwL3UtYm9vdC5sZHMgYi9ib2FyZC9wcm9kcml2ZS9wM3A0NDAvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjMmRmZi4uMDAwMDAwMAotLS0gYS9ib2FyZC9wcm9kcml2ZS9wM3A0NDAvdS1ib290LmxkcworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKgotICogKEMpIENvcHlyaWdodCAyMDAyCi0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC9wcm9kcml2ZS9wM3A0NDAvaW5pdC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9xdWFkMTAwaGQvdS1ib290LmxkcyBiL2JvYXJkL3F1YWQxMDBoZC91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjM1OWI3Li4wMDAwMDAwCi0tLSBhL2JvYXJkL3F1YWQxMDBoZC91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLVNFQVJDSF9ESVIoL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xvY2FsL3Bvd2VycGMtYW55LWVsZi9saWIpOwotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KLSAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL3NhY3NuZy9zYWNzbmcuYyBiL2JvYXJkL3NhY3NuZy9zYWNzbmcuYwppbmRleCAyNTEzOTM3Li40OWQ4YmJhIDEwMDY0NAotLS0gYS9ib2FyZC9zYWNzbmcvc2Fjc25nLmMKKysrIGIvYm9hcmQvc2Fjc25nL3NhY3NuZy5jCkBAIC04NjksMTUgKzg2OSwzIEBACiAjZW5kaWYKIAogI2VuZGlmIC8qIENPTkZJR19NSVNDX0lOSVRfUiAqLwotCi0jaWZkZWYgQ09ORklHX1BPU1QKLS8qCi0gKiBSZXR1cm5zIDEgaWYga2V5cyBwcmVzc2VkIHRvIHN0YXJ0IHRoZSBwb3dlci1vbiBsb25nLXJ1bm5pbmcgdGVzdHMKLSAqIENhbGxlZCBmcm9tIGJvYXJkX2luaXRfZigpLgotICovCi1pbnQgcG9zdF9ob3RrZXlzX3ByZXNzZWQodm9pZCkKLXsKLQlyZXR1cm4gMDsJLyogTm8gaG90a2V5cyBzdXBwb3J0ZWQgKi8KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9zYW1zdW5nL3NtZGsyNDAwL3NtZGsyNDAwLmMgYi9ib2FyZC9zYW1zdW5nL3NtZGsyNDAwL3NtZGsyNDAwLmMKaW5kZXggNDJiZjAwOC4uMTI5NGQzZiAxMDA2NDQKLS0tIGEvYm9hcmQvc2Ftc3VuZy9zbWRrMjQwMC9zbWRrMjQwMC5jCisrKyBiL2JvYXJkL3NhbXN1bmcvc21kazI0MDAvc21kazI0MDAuYwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bmV0ZGV2Lmg+Ci0jaW5jbHVkZSA8czNjMjQwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCmRpZmYgLS1naXQgYS9ib2FyZC9zYW1zdW5nL3NtZGsyNDEwL3NtZGsyNDEwLmMgYi9ib2FyZC9zYW1zdW5nL3NtZGsyNDEwL3NtZGsyNDEwLmMKaW5kZXggZmRlNzczMC4uNWQxYThiYiAxMDA2NDQKLS0tIGEvYm9hcmQvc2Ftc3VuZy9zbWRrMjQxMC9zbWRrMjQxMC5jCisrKyBiL2JvYXJkL3NhbXN1bmcvc21kazI0MTAvc21kazI0MTAuYwpAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bmV0ZGV2Lmg+Ci0jaW5jbHVkZSA8czNjMjQxMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCmRpZmYgLS1naXQgYS9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwL2xvd2xldmVsX2luaXQuUyBiL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvbG93bGV2ZWxfaW5pdC5TCmluZGV4IDQ3ZjcyZjYuLjMwZDg4NzggMTAwNjQ0Ci0tLSBhL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvbG93bGV2ZWxfaW5pdC5TCisrKyBiL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvbG93bGV2ZWxfaW5pdC5TCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCi0jaW5jbHVkZSA8czNjNjQwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzY0MDAuaD4KIAogI2lmZGVmIENPTkZJR19TRVJJQUwxCiAjZGVmaW5lIEVMRklOX1VBUlRfQ09OU09MRV9CQVNFIChFTEZJTl9VQVJUX0JBU0UgKyBFTEZJTl9VQVJUMF9PRkZTRVQpCmRpZmYgLS1naXQgYS9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwL3NtZGs2NDAwLmMgYi9ib2FyZC9zYW1zdW5nL3NtZGs2NDAwL3NtZGs2NDAwLmMKaW5kZXggNTYxYzBjOC4uNzhhYWE5ZSAxMDA2NDQKLS0tIGEvYm9hcmQvc2Ftc3VuZy9zbWRrNjQwMC9zbWRrNjQwMC5jCisrKyBiL2JvYXJkL3NhbXN1bmcvc21kazY0MDAvc21kazY0MDAuYwpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8bmV0ZGV2Lmg+Ci0jaW5jbHVkZSA8czNjNjQwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzY0MDAuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogI2RlZmluZSBDUzg5MDBfVGFjcwkweDAJLyogMGNsawkJYWRkcmVzcyBzZXQtdXAJCSovCmRpZmYgLS1naXQgYS9ib2FyZC9zYW5kYnVyc3QvY29tbW9uL3NiX2NvbW1vbi5jIGIvYm9hcmQvc2FuZGJ1cnN0L2NvbW1vbi9zYl9jb21tb24uYwppbmRleCBhNDg0ODc0Li42YjkxMDc0IDEwMDY0NAotLS0gYS9ib2FyZC9zYW5kYnVyc3QvY29tbW9uL3NiX2NvbW1vbi5jCisrKyBiL2JvYXJkL3NhbmRidXJzdC9jb21tb24vc2JfY29tbW9uLmMKQEAgLTMwMCw5MSArMzAwLDYgQEAKIH0KICNlbmRpZgkvKiAhZGVmaW5lZChDT05GSUdfU1BEX0VFUFJPTSkgKi8KIAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV9wcmVfaW5pdAotICoKLSAqICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGp1c3QgcHJpb3IgdG8gcmVnaXN0ZXJpbmcgdGhlIGhvc2UgYW5kIGdpdmVzCi0gKiAgdGhlIGJvYXJkIHRoZSBvcHBvcnR1bml0eSB0byBjaGVjayB0aGluZ3MuIFJldHVybmluZyBhIHZhbHVlIG9mIHplcm8KLSAqICBpbmRpY2F0ZXMgdGhhdCB0aGluZ3MgYXJlIGJhZCAmIFBDSSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgYWJvcnRlZC4KLSAqCi0gKglEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCi0gKgkoYWRkIHJlZ2lvbnMsIG92ZXJyaWRlIGRlZmF1bHQgYWNjZXNzIHJvdXRpbmVzLCBldGMpIG9yIHBlcmZvcm0KLSAqCWNlcnRhaW4gcHJlLWluaXRpYWxpemF0aW9uIGFjdGlvbnMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi1pbnQgcGNpX3ByZV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqIGhvc2UgKQotewotCXVuc2lnbmVkIGxvbmcgc3RyYXA7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqCVRoZSBtZXRyb2JveCBpcyBhbHdheXMgY29uZmlndXJlZCBhcyB0aGUgaG9zdCAmIHJlcXVpcmVzIHRoZQotCSAqCVBDSSBhcmJpdGVyIHRvIGJlIGVuYWJsZWQuCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0JbWZzZHIoU0RSMF9TRFNUUDEsIHN0cmFwKTsKLQlpZiggKHN0cmFwICYgU0RSMF9TRFNUUDFfUEFFX01BU0spID09IDAgKXsKLQkJcHJpbnRmKCJQQ0k6IFNEUjBfU1RSUDFbJTA4bFhdIC0gUENJIEFyYml0ZXIgZGlzYWJsZWQuXG4iLHN0cmFwKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIHBjaV90YXJnZXRfaW5pdAotICoKLSAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCi12b2lkIHBjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBob3NlICkKLXsKLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIERpc2FibGUgZXZlcnl0aGluZwotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDMyciggUENJTDBfUElNMFNBLCAwICk7IC8qIGRpc2FibGUgKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTFTQSwgMCApOyAvKiBkaXNhYmxlICovCi0Jb3V0MzJyKCBQQ0lMMF9QSU0yU0EsIDAgKTsgLyogZGlzYWJsZSAqLwotCW91dDMyciggUENJTDBfRVJPTUJBLCAwICk7IC8qIGRpc2FibGUgZXhwYW5zaW9uIHJvbSAqLwotCi0JLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQkgKiBNYXAgYWxsIG9mIFNEUkFNIHRvIFBDSSBhZGRyZXNzIDB4MDAwMF8wMDAwLiBOb3RlIHRoYXQgdGhlIDQ0MCBzdHJhcHBpbmcKLQkgKiBvcHRpb25zIHRvIG5vdCBzdXBwb3J0IHNpemVzIHN1Y2ggYXMgMTI4LzI1NiBNQi4KLQkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQlvdXQzMnIoIFBDSUwwX1BJTTBMQUwsIENPTkZJR19TWVNfU0RSQU1fQkFTRSApOwotCW91dDMyciggUENJTDBfUElNMExBSCwgMCApOwotCW91dDMyciggUENJTDBfUElNMFNBLCB+KGdkLT5yYW1fc2l6ZSAtIDEpIHwgMSApOwotCi0Jb3V0MzJyKCBQQ0lMMF9CQVIwLCAwICk7Ci0KLQkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCSAqIFByb2dyYW0gdGhlIGJvYXJkJ3Mgc3Vic3lzdGVtIGlkL3ZlbmRvciBpZAotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCW91dDE2ciggUENJTDBfU0JTWVNWSUQsIENPTkZJR19TWVNfUENJX1NVQlNZU19WRU5ET1JJRCApOwotCW91dDE2ciggUENJTDBfU0JTWVNJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0RFVklDRUlEICk7Ci0KLQlvdXQxNnIoIFBDSUwwX0NNRCwgaW4xNnIoUENJTDBfQ01EKSB8IFBDSV9DT01NQU5EX01FTU9SWSApOwotfQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCkgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIGlzX3BjaV9ob3N0Ci0gKgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotaW50IGlzX3BjaV9ob3N0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKLXsKLSAgICAvKiBUaGUgbWV0cm9ib3ggaXMgYWx3YXlzIGNvbmZpZ3VyZWQgYXMgaG9zdC4gKi8KLSAgICByZXR1cm4oMSk7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogIGJvYXJkX2dldF9lbmV0YWRkcgogICoKZGlmZiAtLWdpdCBhL2JvYXJkL3NhbmRidXJzdC9rYXJlZi91LWJvb3QubGRzIGIvYm9hcmQvc2FuZGJ1cnN0L2thcmVmL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMmVjZTIuLjAwMDAwMDAKLS0tIGEvYm9hcmQvc2FuZGJ1cnN0L2thcmVmL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwNQotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqIFRyYXZpcyBCLiBTYXd5ZXIsIFNhbmRidXJzdCBDb3Jwb3JhdGlvbiwgdHNhd3llckBzYW5kYnVyc3QuY29tCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAuYm9vdHBnIDB4RkZGRkYwMDAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSguYm9vdHBnKQotICB9ID0gMHhmZmZmCi0KLSAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCi0gIC4gPSArIFNJWkVPRl9IRUFERVJTOwotICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KLSAgLmhhc2ggICAgICAgICAgOiB7ICooLmhhc2gpCQl9Ci0gIC5keW5zeW0gICAgICAgIDogeyAqKC5keW5zeW0pCQl9Ci0gIC5keW5zdHIgICAgICAgIDogeyAqKC5keW5zdHIpCQl9Ci0gIC5yZWwudGV4dCAgICAgIDogeyAqKC5yZWwudGV4dCkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJfQotICAucmVsYS5nb3QgICAgICA6IHsgKigucmVsYS5nb3QpCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJfQotICAucmVsLnBsdCAgICAgICA6IHsgKigucmVsLnBsdCkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC9zYW5kYnVyc3Qva2FyZWYvaW5pdC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2tnZGIubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC90cmFwcy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2ludGVycnVwdHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC80eHhfdWFydC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCi0gICAgZHJpdmVycy9uZXQvNHh4X2VuZXQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLS8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCi0vKiAgICBjb21tb24vZW52X2VtYmVkZGVkLm8oLnRleHQpKi8KLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLQotICAuID0gLjsKLSAgX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLSAgX19leF90YWJsZSA6IHsgKihfX2V4X3RhYmxlKSB9Ci0gIF9fc3RvcF9fX2V4X3RhYmxlID0gLjsKLQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2JlZ2luID0gLjsKLSAgLnRleHQuaW5pdCA6IHsgKigudGV4dC5pbml0KSB9Ci0gIC5kYXRhLmluaXQgOiB7ICooLmRhdGEuaW5pdCkgfQotICAuID0gQUxJR04oMjU2KTsKLSAgX19pbml0X2VuZCA9IC47Ci0KLSAgX19ic3Nfc3RhcnQgPSAuOwotICAuYnNzIChOT0xPQUQpICAgICAgIDoKLSAgewotICAgKiguc2JzcykgKiguc2NvbW1vbikKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICAgLiA9IEFMSUdOKDQpOwotICB9Ci0gIF9lbmQgPSAuIDsKLSAgUFJPVklERSAoZW5kID0gLik7Ci19CmRpZmYgLS1naXQgYS9ib2FyZC9zYW5kYnVyc3QvbWV0cm9ib3gvdS1ib290LmxkcyBiL2JvYXJkL3NhbmRidXJzdC9tZXRyb2JveC91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTg1MWYyLi4wMDAwMDAwCi0tLSBhL2JvYXJkL3NhbmRidXJzdC9tZXRyb2JveC91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDUKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKiBUcmF2aXMgQi4gU2F3eWVyLCBTYW5kYnVyc3QgQ29ycG9yYXRpb24sIHRzYXd5ZXJAc2FuZGJ1cnN0LmNvbQotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCX0KLSAgLnJlbGEudGV4dCAgICAgOiB7ICooLnJlbGEudGV4dCkJfQotICAucmVsLmRhdGEgICAgICA6IHsgKigucmVsLmRhdGEpCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQl9Ci0gIC5yZWwuY3RvcnMgICAgIDogeyAqKC5yZWwuY3RvcnMpCX0KLSAgLnJlbGEuY3RvcnMgICAgOiB7ICooLnJlbGEuY3RvcnMpCX0KLSAgLnJlbC5kdG9ycyAgICAgOiB7ICooLnJlbC5kdG9ycykJfQotICAucmVsYS5kdG9ycyAgICA6IHsgKigucmVsYS5kdG9ycykJfQotICAucmVsLmJzcyAgICAgICA6IHsgKigucmVsLmJzcykJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCX0KLSAgLnJlbGEucGx0ICAgICAgOiB7ICooLnJlbGEucGx0KQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvc2FuZGJ1cnN0L21ldHJvYm94L2luaXQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9rZ2RiLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvdHJhcHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9pbnRlcnJ1cHRzLm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvNHh4X3VhcnQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC9jcHVfaW5pdC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L3NwZWVkLm8JKC50ZXh0KQotICAgIGRyaXZlcnMvbmV0LzR4eF9lbmV0Lm8JKC50ZXh0KQotICAgIGNvbW1vbi9kbG1hbGxvYy5vCSgudGV4dCkKLSAgICBsaWJfZ2VuZXJpYy9jcmMzMi5vCQkoLnRleHQpCi0gICAgbGliX3BwYy9leHRhYmxlLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL3psaWIubwkJKC50ZXh0KQotCi0vKiAgICAuID0gZW52X29mZnNldDsqLwotLyogICAgY29tbW9uL2Vudl9lbWJlZGRlZC5vKC50ZXh0KSovCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc2JjMjQxMHgvc2JjMjQxMHguYyBiL2JvYXJkL3NiYzI0MTB4L3NiYzI0MTB4LmMKaW5kZXggNzQ1MmMxZi4uM2E5MzY3NyAxMDA2NDQKLS0tIGEvYm9hcmQvc2JjMjQxMHgvc2JjMjQxMHguYworKysgYi9ib2FyZC9zYmMyNDEweC9zYmMyNDEweC5jCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxuZXRkZXYuaD4KLSNpbmNsdWRlIDxzM2MyNDEwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvczNjMjR4MF9jcHUuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0NNRF9OQU5EKQogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CmRpZmYgLS1naXQgYS9ib2FyZC9zYmM0MDUvdS1ib290LmxkcyBiL2JvYXJkL3NiYzQwNS91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWVkZDY3Li4wMDAwMDAwCi0tLSBhL2JvYXJkL3NiYzQwNS91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDAsIDIwMDEKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KLSAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KLQotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC90cmFwcy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2ludGVycnVwdHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC80eHhfdWFydC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCi0gICAgZHJpdmVycy9uZXQvNHh4X2VuZXQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLS8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCi0vKiAgICBjb21tb24vZW52X2VtYmVkZGVkLm8oLnRleHQpKi8KLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooLmVoX2ZyYW1lKQotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQvc29jcmF0ZXMvc29jcmF0ZXMuYyBiL2JvYXJkL3NvY3JhdGVzL3NvY3JhdGVzLmMKaW5kZXggNTFkNjZkNS4uOTE4M2MxNSAxMDA2NDQKLS0tIGEvYm9hcmQvc29jcmF0ZXMvc29jcmF0ZXMuYworKysgYi9ib2FyZC9zb2NyYXRlcy9zb2NyYXRlcy5jCkBAIC0yNjgsMTcgKzI2OCw2IEBACiB9CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfT0ZfTElCRkRUKSAmJiBkZWZpbmVkKENPTkZJR19PRl9CT0FSRF9TRVRVUCkgKi8KIAotI2RlZmluZSBDT05GSUdfU1lTX0xJTUVfU1JTVAkJKChDT05GSUdfU1lTX0xJTUVfQkFTRSkgKyAweDAxRkMwMDJDKQotI2RlZmluZSBDT05GSUdfU1lTX0xJTUVfQ0NGCQkoKENPTkZJR19TWVNfTElNRV9CQVNFKSArIDB4MDFGQzAwMzgpCi0jZGVmaW5lIENPTkZJR19TWVNfTElNRV9NTVIJCSgoQ09ORklHX1NZU19MSU1FX0JBU0UpICsgMHgwMUZDRkZGQykKLS8qIExpbWUgY2xvY2sgZnJlcXVlbmN5ICovCi0jZGVmaW5lIENPTkZJR19TWVNfTElNRV9DTEtfMTAwTUhaCTB4MDAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19MSU1FX0NMS18xMzNNSFoJMHgxMDAwMAotLyogU0RSQU0gcGFyYW1ldGVyICovCi0jZGVmaW5lIENPTkZJR19TWVNfTElNRV9NTVJfVkFMVUUJMHg0MTU3QkE2MwotCi0jZGVmaW5lIERJU1BMQVlfV0lEVEgJCTgwMAotI2RlZmluZSBESVNQTEFZX0hFSUdIVAkJNDgwCiAjZGVmaW5lIERFRkFVTFRfQlJJR0hUTkVTUwkyNQogI2RlZmluZSBCQUNLTElHSFRfRU5BQkxFCSgxIDw8IDMxKQogCkBAIC0zMDgsMTQgKzI5NywxMiBAQAogCXJldHVybiBpbml0X3JlZ3M7CiB9CiAKLSNkZWZpbmUgQ09ORklHX1NZU19MSU1FX0NJRAkJKChDT05GSUdfU1lTX0xJTUVfQkFTRSkgKyAweDAxRkMwMEYwKQotI2RlZmluZSBDT05GSUdfU1lTX0xJTUVfUkVWCQkoKENPTkZJR19TWVNfTElNRV9CQVNFKSArIDB4MDFGRjgwODQpCiBpbnQgbGltZV9wcm9iZSh2b2lkKQogewogCXZvbGF0aWxlIGNjc3JfbGJjX3QgKm1lbWN0bCA9ICh2b2lkICopKENPTkZJR19TWVNfTVBDODV4eF9MQkNfQUREUik7CiAJdWludCBjZmdfYnIyOwogCXVpbnQgY2ZnX29yMjsKLQl1aW50IHJlZzsKKwlpbnQgdHlwZTsKIAogCWNmZ19icjIgPSBtZW1jdGwtPmJyMjsKIAljZmdfb3IyID0gbWVtY3RsLT5vcjI7CkBAIC0zMjUsMjEgKzMxMiwxNSBAQAogCW1lbWN0bC0+b3IyID0gMHhmYzAwMDQxMDsKIAltZW1jdGwtPmJyMiA9IChDT05GSUdfU1lTX0xJTUVfQkFTRSkgfCAweDAwMDAxOTAxOwogCi0JLyogVHJ5IHRvIGFjY2VzcyBHREMgSUQvUmV2aXNpb24gcmVnaXN0ZXJzICovCi0JcmVnID0gaW5fYmUzMigodm9pZCAqKUNPTkZJR19TWVNfTElNRV9DSUQpOwotCXJlZyA9IGluX2JlMzIoKHZvaWQgKilDT05GSUdfU1lTX0xJTUVfQ0lEKTsKLQlpZiAocmVnID09IDB4MzAzKSB7Ci0JCXJlZyA9IGluX2JlMzIoKHZvaWQgKilDT05GSUdfU1lTX0xJTUVfUkVWKTsKLQkJcmVnID0gaW5fYmUzMigodm9pZCAqKUNPTkZJR19TWVNfTElNRV9SRVYpOwotCQlyZWcgPSAoKHJlZyAmIH4weGZmKSA9PSAweDIwMDUwMTAwKSA/IDEgOiAwOwotCX0gZWxzZQotCQlyZWcgPSAwOworCS8qIEdldCBjb250cm9sbGVyIHR5cGUgKi8KKwl0eXBlID0gbWI4NjJ4eF9wcm9iZShDT05GSUdfU1lTX0xJTUVfQkFTRSk7CiAKIAkvKiBSZXN0b3JlIHByZXZpb3VzIENTMiBjb25maWd1cmF0aW9uICovCiAJbWVtY3RsLT5icjIgPSAwOwogCW1lbWN0bC0+b3IyID0gY2ZnX29yMjsKIAltZW1jdGwtPmJyMiA9IGNmZ19icjI7Ci0JcmV0dXJuIHJlZzsKKworCXJldHVybiAodHlwZSA9PSBNQjg2MlhYX1RZUEVfTElNRSkgPyAxIDogMDsKIH0KIAogLyogUmV0dXJucyBMaW1lIGJhc2UgYWRkcmVzcyAqLwpAQCAtMzQ4LDIxICszMjksOCBAQAogCWlmICghbGltZV9wcm9iZSgpKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogUmVzZXQgTGltZSBjb250cm9sbGVyCi0JICovCi0Jb3V0X2JlMzIoKHZvaWQgKilDT05GSUdfU1lTX0xJTUVfU1JTVCwgMHgxKTsKLQl1ZGVsYXkoMjAwKTsKLQotCS8qIFNldCBMaW1lIGNsb2NrIHRvIDEzM01IeiAqLwotCW91dF9iZTMyKCh2b2lkICopQ09ORklHX1NZU19MSU1FX0NDRiwgQ09ORklHX1NZU19MSU1FX0NMS18xMzNNSFopOwotCS8qIERlbGF5IHJlcXVpcmVkICovCi0JdWRlbGF5KDMwMCk7Ci0JLyogU2V0IG1lbW9yeSBwYXJhbWV0ZXJzICovCi0Jb3V0X2JlMzIoKHZvaWQgKilDT05GSUdfU1lTX0xJTUVfTU1SLCBDT05GSUdfU1lTX0xJTUVfTU1SX1ZBTFVFKTsKLQotCW1iODYyeHgud2luU2l6ZVggPSBESVNQTEFZX1dJRFRIOwotCW1iODYyeHgud2luU2l6ZVkgPSBESVNQTEFZX0hFSUdIVDsKKwltYjg2Mnh4LndpblNpemVYID0gODAwOworCW1iODYyeHgud2luU2l6ZVkgPSA0ODA7CiAJbWI4NjJ4eC5nZGZJbmRleCA9IEdERl8xNUJJVF81NTVSR0I7CiAJbWI4NjJ4eC5nZGZCeXRlc1BQID0gMjsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvc3N2L2FkbnBlc2MxL2FkbnBlc2MxLmMgYi9ib2FyZC9zc3YvYWRucGVzYzEvYWRucGVzYzEuYwppbmRleCA3MjgxMGQwLi44MDJiZmJhIDEwMDY0NAotLS0gYS9ib2FyZC9zc3YvYWRucGVzYzEvYWRucGVzYzEuYworKysgYi9ib2FyZC9zc3YvYWRucGVzYzEvYWRucGVzYzEuYwpAQCAtOTEsMTcgKzkxLDYgQEAKIAogI2VuZGlmCiAKLSNpZglkZWZpbmVkKENPTkZJR19QT1NUKQotLyoKLSAqIFJldHVybnMgMSBpZiBrZXlzIHByZXNzZWQgdG8gc3RhcnQgdGhlIHBvd2VyLW9uIGxvbmctcnVubmluZyB0ZXN0cwotICogQ2FsbGVkIGZyb20gYm9hcmRfaW5pdF9mKCkuCi0gKi8KLWludCBwb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQotewotCXJldHVybiAwOyAgICAgICAvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLwotfQotI2VuZGlmIC8qIENPTkZJR19QT1NUICovCi0KICNpZmRlZiBDT05GSUdfQ01EX05FVAogaW50IGJvYXJkX2V0aF9pbml0KGJkX3QgKmJpcykKIHsKZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvY21kX3RyYWIuYyBiL2JvYXJkL3RyYWIvY21kX3RyYWIuYwppbmRleCAwNGEzNjA3Li40NzJkN2Q4IDEwMDY0NAotLS0gYS9ib2FyZC90cmFiL2NtZF90cmFiLmMKKysrIGIvYm9hcmQvdHJhYi9jbWRfdHJhYi5jCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8czNjMjQwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAjaW5jbHVkZSA8cnRjLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9ib2FyZC90cmFiL3JzNDg1LmMgYi9ib2FyZC90cmFiL3JzNDg1LmMKaW5kZXggN2Q1YzBhMi4uYWQwYzEzNiAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi9yczQ4NS5jCisrKyBiL2JvYXJkL3RyYWIvcnM0ODUuYwpAQCAtMjIsNyArMjIsNyBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxzM2MyNDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvczNjMjR4MF9jcHUuaD4KICNpbmNsdWRlICJyczQ4NS5oIgogCiBzdGF0aWMgdm9pZCByczQ4NV9zZXRicmcgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi9yczQ4NS5oIGIvYm9hcmQvdHJhYi9yczQ4NS5oCmluZGV4IDlmMGE1YjkuLjE2ZDY5YmIgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RyYWIvcnM0ODUuaAorKysgYi9ib2FyZC90cmFiL3JzNDg1LmgKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgX1JTNDg1X0hfCiAjZGVmaW5lIF9SUzQ4NV9IXwogCi0jaW5jbHVkZSA8czNjMjQwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAKIGludCByczQ4NV9pbml0ICh2b2lkKTsKIGludCByczQ4NV9nZXRjICh2b2lkKTsKZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvdHJhYi5jIGIvYm9hcmQvdHJhYi90cmFiLmMKaW5kZXggZWE3ODJhOS4uNzFmZDIyYyAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi90cmFiLmMKKysrIGIvYm9hcmQvdHJhYi90cmFiLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxuZXRkZXYuaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRlIDxzM2MyNDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvczNjMjR4MF9jcHUuaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+CiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwpkaWZmIC0tZ2l0IGEvYm9hcmQvdHJhYi90cmFiX2ZrdC5jIGIvYm9hcmQvdHJhYi90cmFiX2ZrdC5jCmluZGV4IGRjMmE4ZDcuLjJkZjlhMDQgMTAwNjQ0Ci0tLSBhL2JvYXJkL3RyYWIvdHJhYl9ma3QuYworKysgYi9ib2FyZC90cmFiL3RyYWJfZmt0LmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxleHBvcnRzLmg+CiAjaW5jbHVkZSA8dGltZXN0YW1wLmg+Ci0jaW5jbHVkZSA8czNjMjQwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAjaW5jbHVkZSAidHNjMjAwMC5oIgogI2luY2x1ZGUgInJzNDg1LmgiCiAKZGlmZiAtLWdpdCBhL2JvYXJkL3RyYWIvdHNjMjAwMC5jIGIvYm9hcmQvdHJhYi90c2MyMDAwLmMKaW5kZXggZmM1MDFhOC4uNTg5MDYyNCAxMDA2NDQKLS0tIGEvYm9hcmQvdHJhYi90c2MyMDAwLmMKKysrIGIvYm9hcmQvdHJhYi90c2MyMDAwLmMKQEAgLTI2LDcgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8czNjMjQwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8ZGl2NjQuaD4KICNpbmNsdWRlICJ0c2MyMDAwLmgiCmRpZmYgLS1naXQgYS9ib2FyZC90cmFiL3ZmZC5jIGIvYm9hcmQvdHJhYi92ZmQuYwppbmRleCBkNWFkNWJiLi5iN2ViOGNjIDEwMDY0NAotLS0gYS9ib2FyZC90cmFiL3ZmZC5jCisrKyBiL2JvYXJkL3RyYWIvdmZkLmMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvX2Rldi5oPgotI2luY2x1ZGUgPHMzYzI0MDAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zM2MyNHgwX2NwdS5oPgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIApkaWZmIC0tZ2l0IGEvYm9hcmQvdWMxMDAvdWMxMDAuYyBiL2JvYXJkL3VjMTAwL3VjMTAwLmMKaW5kZXggMzhjN2JlNi4uNGRiYTI5MCAxMDA2NDQKLS0tIGEvYm9hcmQvdWMxMDAvdWMxMDAuYworKysgYi9ib2FyZC91YzEwMC91YzEwMC5jCkBAIC0yNjgsMTUgKzI2OCwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQotCi0jaWZkZWYgQ09ORklHX1BPU1QKLS8qCi0gKiBSZXR1cm5zIDEgaWYga2V5cyBwcmVzc2VkIHRvIHN0YXJ0IHRoZSBwb3dlci1vbiBsb25nLXJ1bm5pbmcgdGVzdHMKLSAqIENhbGxlZCBmcm9tIGJvYXJkX2luaXRfZigpLgotICovCi1pbnQgcG9zdF9ob3RrZXlzX3ByZXNzZWQgKHZvaWQpCi17Ci0JcmV0dXJuIDA7CQkvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC93N28vdS1ib290LmxkcyBiL2JvYXJkL3c3by91LWJvb3QubGRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTUzZmQ0Li4wMDAwMDAwCi0tLSBhL2JvYXJkL3c3by91LWJvb3QubGRzCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDEKLSAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCi0gKgotICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKLSAqIHByb2plY3QuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotT1VUUFVUX0FSQ0gocG93ZXJwYykKLS8qIERvIHdlIG5lZWQgYW55IG9mIHRoZXNlIGZvciBlbGY/Ci0gICBfX0RZTkFNSUMgPSAwOyAgICAqLwotU0VDVElPTlMKLXsKLSAgLnJlc2V0dmVjIDB4RkZGRkZGRkMgOgotICB7Ci0gICAgKigucmVzZXR2ZWMpCi0gIH0gPSAweGZmZmYKLQotICAvKiBSZWFkLW9ubHkgc2VjdGlvbnMsIG1lcmdlZCBpbnRvIHRleHQgc2VnbWVudDogKi8KLSAgLiA9ICsgU0laRU9GX0hFQURFUlM7Ci0gIC5pbnRlcnAgOiB7ICooLmludGVycCkgfQotICAuaGFzaCAgICAgICAgICA6IHsgKiguaGFzaCkJCX0KLSAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KLSAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KLSAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQotICAucmVsYS50ZXh0ICAgICA6IHsgKigucmVsYS50ZXh0KQl9Ci0gIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KLSAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkJfQotICAucmVsLnJvZGF0YSAgICA6IHsgKigucmVsLnJvZGF0YSkJfQotICAucmVsYS5yb2RhdGEgICA6IHsgKigucmVsYS5yb2RhdGEpCX0KLSAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9Ci0gIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KLSAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQotICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQotICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9Ci0gIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9Ci0gIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQotICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9Ci0gIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQotICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9Ci0gIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9Ci0gIC5wbHQgOiB7ICooLnBsdCkgfQotICAudGV4dCAgICAgIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCi0gICAgYm9hcmQvdzdvL2luaXQubwkoLnRleHQpCi0gICAgKigudGV4dCkKLSAgICAqKC5nb3QxKQotICB9Ci0gIF9ldGV4dCA9IC47Ci0gIFBST1ZJREUgKGV0ZXh0ID0gLik7Ci0gIC5yb2RhdGEgICAgOgotICB7Ci0gICAgKiguZWhfZnJhbWUpCi0gICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQotICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCi0gIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KLSAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQotCi0gIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLwotICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKLSAgX2Vyb3RleHQgPSAuOwotICBQUk9WSURFIChlcm90ZXh0ID0gLik7Ci0gIC5yZWxvYyAgIDoKLSAgewotICAgICooLmdvdCkKLSAgICBfR09UMl9UQUJMRV8gPSAuOwotICAgICooLmdvdDIpCi0gICAgX0ZJWFVQX1RBQkxFXyA9IC47Ci0gICAgKiguZml4dXApCi0gIH0KLSAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOwotICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOwotCi0gIC5kYXRhICAgIDoKLSAgewotICAgICooLmRhdGEpCi0gICAgKiguZGF0YTEpCi0gICAgKiguc2RhdGEpCi0gICAgKiguc2RhdGEyKQotICAgICooLmR5bmFtaWMpCi0gICAgQ09OU1RSVUNUT1JTCi0gIH0KLSAgX2VkYXRhICA9ICAuOwotICBQUk9WSURFIChlZGF0YSA9IC4pOwotCi0gIC4gPSAuOwotICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOwotICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQotICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKLQotCi0gIC4gPSAuOwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOwotCi0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfYmVnaW4gPSAuOwotICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KLSAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9Ci0gIC4gPSBBTElHTigyNTYpOwotICBfX2luaXRfZW5kID0gLjsKLQotICBfX2Jzc19zdGFydCA9IC47Ci0gIC5ic3MgKE5PTE9BRCkgICAgICAgOgotICB7Ci0gICAqKC5zYnNzKSAqKC5zY29tbW9uKQotICAgKiguZHluYnNzKQotICAgKiguYnNzKQotICAgKihDT01NT04pCi0gICAuID0gQUxJR04oNCk7Ci0gIH0KLSAgX2VuZCA9IC4gOwotICBQUk9WSURFIChlbmQgPSAuKTsKLX0KZGlmZiAtLWdpdCBhL2JvYXJkL3hlcy94cGVkaXRlMTAwMC91LWJvb3QubGRzIGIvYm9hcmQveGVzL3hwZWRpdGUxMDAwL3UtYm9vdC5sZHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZjY1ZDYuLjAwMDAwMDAKLS0tIGEvYm9hcmQveGVzL3hwZWRpdGUxMDAwL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMi0yMDA0Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLU9VVFBVVF9BUkNIKHBvd2VycGMpCi0vKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwotICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCi17Ci0gIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKLSAgewotICAgICooLnJlc2V0dmVjKQotICB9ID0gMHhmZmZmCi0KLSAgLmJvb3RwZyAweEZGRkZGMDAwIDoKLSAgewotICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgLyogV0FSTklORyAtIHRoZSBmb2xsb3dpbmcgaXMgaGFuZC1vcHRpbWl6ZWQgdG8gZml0IHdpdGhpbgkqLwotICAgIC8qIHRoZSBzZWN0b3IgbGF5b3V0IG9mIG91ciBmbGFzaCBjaGlwcyEJWFhYIEZJWE1FIFhYWAkqLwotCi0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLSAgICBib2FyZC94ZXMveHBlZGl0ZTEwMDAvaW5pdC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2tnZGIubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC90cmFwcy5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2ludGVycnVwdHMubwkoLnRleHQpCi0gICAgY3B1L3BwYzR4eC80eHhfdWFydC5vCSgudGV4dCkKLSAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQotICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCi0gICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQotICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKLSAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCi0KLSAgICAqKC50ZXh0KQotICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5laF9mcmFtZSkKLSAgICAqKFNPUlRfQllfQUxJR05NRU5UKFNPUlRfQllfTkFNRSgucm9kYXRhKikpKQotICB9Ci0gIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKLSAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQotICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9Ci0KLSAgLyogUmVhZC13cml0ZSBzZWN0aW9uLCBtZXJnZWQgaW50byBkYXRhIHNlZ21lbnQ6ICovCi0gIC4gPSAoLiArIDB4MDBGRikgJiAweEZGRkZGRjAwOwotICBfZXJvdGV4dCA9IC47Ci0gIFBST1ZJREUgKGVyb3RleHQgPSAuKTsKLSAgLnJlbG9jICAgOgotICB7Ci0gICAgKiguZ290KQotICAgIF9HT1QyX1RBQkxFXyA9IC47Ci0gICAgKiguZ290MikKLSAgICBfRklYVVBfVEFCTEVfID0gLjsKLSAgICAqKC5maXh1cCkKLSAgfQotICBfX2dvdDJfZW50cmllcyA9IChfRklYVVBfVEFCTEVfIC0gX0dPVDJfVEFCTEVfKSA+PjI7Ci0gIF9fZml4dXBfZW50cmllcyA9ICguIC0gX0ZJWFVQX1RBQkxFXyk+PjI7Ci0KLSAgLmRhdGEgICAgOgotICB7Ci0gICAgKiguZGF0YSkKLSAgICAqKC5kYXRhMSkKLSAgICAqKC5zZGF0YSkKLSAgICAqKC5zZGF0YTIpCi0gICAgKiguZHluYW1pYykKLSAgICBDT05TVFJVQ1RPUlMKLSAgfQotICBfZWRhdGEgID0gIC47Ci0gIFBST1ZJREUgKGVkYXRhID0gLik7Ci0KLSAgLiA9IC47Ci0gIF9fdV9ib290X2NtZF9zdGFydCA9IC47Ci0gIC51X2Jvb3RfY21kIDogeyAqKC51X2Jvb3RfY21kKSB9Ci0gIF9fdV9ib290X2NtZF9lbmQgPSAuOwotCi0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvYm9hcmQveGVzL3hwZWRpdGUxMDAwL3hwZWRpdGUxMDAwLmMgYi9ib2FyZC94ZXMveHBlZGl0ZTEwMDAveHBlZGl0ZTEwMDAuYwppbmRleCAwNDk0OWJiLi5iNGNiYjJmIDEwMDY0NAotLS0gYS9ib2FyZC94ZXMveHBlZGl0ZTEwMDAveHBlZGl0ZTEwMDAuYworKysgYi9ib2FyZC94ZXMveHBlZGl0ZTEwMDAveHBlZGl0ZTEwMDAuYwpAQCAtMTM2LDYgKzEzNiw4IEBACiB9CiAKIC8qCisgKiBPdmVycmlkZSB3ZWFrIHBjaV9wcmVfaW5pdCgpCisgKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHJlZ2lzdGVyaW5nIHRoZSBob3NlIGFuZCBnaXZlcwogICogdGhlIGJvYXJkIHRoZSBvcHBvcnR1bml0eSB0byBjaGVjayB0aGluZ3MuIFJldHVybmluZyBhIHZhbHVlIG9mIHplcm8KICAqIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgpAQCAtMTQ0LDcgKzE0Niw2IEBACiAgKiAoYWRkIHJlZ2lvbnMsIG92ZXJyaWRlIGRlZmF1bHQgYWNjZXNzIHJvdXRpbmVzLCBldGMpIG9yIHBlcmZvcm0KICAqIGNlcnRhaW4gcHJlLWluaXRpYWxpemF0aW9uIGFjdGlvbnMuCiAgKi8KLQogI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKIGludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSkKIHsKQEAgLTE2Niw0MCArMTY3LDEwIEBACiB9CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKQotLyoKLSAqIFRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCi0gKiBpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCi0gKiBtYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCi0gKi8KLXZvaWQgcGNpX3RhcmdldF9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqIGhvc2UpCi17Ci0JLyogRGlzYWJsZSBldmVyeXRoaW5nICovCi0Jb3V0MzJyKFBDSUwwX1BJTTBTQSwgMCk7Ci0Jb3V0MzJyKFBDSUwwX1BJTTFTQSwgMCk7Ci0Jb3V0MzJyKFBDSUwwX1BJTTJTQSwgMCk7Ci0Jb3V0MzJyKFBDSUwwX0VST01CQSwgMCk7IC8qIGRpc2FibGUgZXhwYW5zaW9uIHJvbSAqLwotCi0JLyoKLQkgKiBNYXAgYWxsIG9mIFNEUkFNIHRvIFBDSSBhZGRyZXNzIDB4MDAwMF8wMDAwLiBOb3RlIHRoYXQgdGhlIDQ0MCBzdHJhcHBpbmcKLQkgKiBvcHRpb25zIHRvIG5vdCBzdXBwb3J0IHNpemVzIHN1Y2ggYXMgMTI4LzI1NiBNQi4KLQkgKi8KLQlvdXQzMnIoUENJTDBfUElNMExBTCwgQ09ORklHX1NZU19TRFJBTV9CQVNFKTsKLQlvdXQzMnIoUENJTDBfUElNMExBSCwgMCk7Ci0Jb3V0MzJyKFBDSUwwX1BJTTBTQSwgfihnZC0+cmFtX3NpemUgLSAxKSB8IDEpOwotCi0Jb3V0MzJyKFBDSUwwX0JBUjAsIDApOwotCi0JLyogUHJvZ3JhbSB0aGUgYm9hcmQncyBzdWJzeXN0ZW0gaWQvdmVuZG9yIGlkICovCi0Jb3V0MTZyKFBDSUwwX1NCU1lTVklELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfVkVORE9SSUQpOwotCW91dDE2cihQQ0lMMF9TQlNZU0lELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfREVWSUNFSUQpOwotCi0Jb3V0MTZyKFBDSUwwX0NNRCwgaW4xNnIoUENJTDBfQ01EKSB8IFBDSV9DT01NQU5EX01FTU9SWSk7Ci19Ci0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUENJKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKSAqLwotCiAjaWYgZGVmaW5lZChDT05GSUdfUENJKQogLyoKKyAqIE92ZXJyaWRlIHdlYWsgaXNfcGNpX2hvc3QoKQorICoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCiAgKiBwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKICAqIFBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCmRpZmYgLS1naXQgYS9ib2FyZC94aWxpbngvbWwzMDAvY29uZmlnLm1rIGIvYm9hcmQveGlsaW54L21sMzAwL2NvbmZpZy5tawppbmRleCA1N2RkYjJmLi4yMDhhMjViYSAxMDA2NDQKLS0tIGEvYm9hcmQveGlsaW54L21sMzAwL2NvbmZpZy5taworKysgYi9ib2FyZC94aWxpbngvbWwzMDAvY29uZmlnLm1rCkBAIC0yNywzICsyNyw2IEBACiAKICNURVhUX0JBU0UgPSAweEZGRkUwMDAwCiBURVhUX0JBU0UgPSAweDA0MDAwMDAwCisKKyMgVXNlIGJvYXJkIHNwZWNpZmljIGxpbmtlciBzY3JpcHQKK0xEU0NSSVBUIDo9ICQoU1JDVFJFRSkvYm9hcmQveGlsaW54L21sMzAwL3UtYm9vdC5sZHMKZGlmZiAtLWdpdCBhL2JvYXJkL3pldXMvdS1ib290LmxkcyBiL2JvYXJkL3pldXMvdS1ib290LmxkcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjY2QzMy4uMDAwMDAwMAotLS0gYS9ib2FyZC96ZXVzL3UtYm9vdC5sZHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMAotICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi1PVVRQVVRfQVJDSChwb3dlcnBjKQotLyogRG8gd2UgbmVlZCBhbnkgb2YgdGhlc2UgZm9yIGVsZj8KLSAgIF9fRFlOQU1JQyA9IDA7ICAgICovCi1TRUNUSU9OUwotewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLwotICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKLSAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9Ci0gIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQotICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQotICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQotICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9Ci0gIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpCX0KLSAgLnJlbC5kYXRhICAgICAgOiB7ICooLnJlbC5kYXRhKQkJfQotICAucmVsYS5kYXRhICAgICA6IHsgKigucmVsYS5kYXRhKQl9Ci0gIC5yZWwucm9kYXRhICAgIDogeyAqKC5yZWwucm9kYXRhKQl9Ci0gIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkJfQotICAucmVsLmdvdCAgICAgICA6IHsgKigucmVsLmdvdCkJCX0KLSAgLnJlbGEuZ290ICAgICAgOiB7ICooLnJlbGEuZ290KQkJfQotICAucmVsLmN0b3JzICAgICA6IHsgKigucmVsLmN0b3JzKQl9Ci0gIC5yZWxhLmN0b3JzICAgIDogeyAqKC5yZWxhLmN0b3JzKQl9Ci0gIC5yZWwuZHRvcnMgICAgIDogeyAqKC5yZWwuZHRvcnMpCX0KLSAgLnJlbGEuZHRvcnMgICAgOiB7ICooLnJlbGEuZHRvcnMpCX0KLSAgLnJlbC5ic3MgICAgICAgOiB7ICooLnJlbC5ic3MpCQl9Ci0gIC5yZWxhLmJzcyAgICAgIDogeyAqKC5yZWxhLmJzcykJCX0KLSAgLnJlbC5wbHQgICAgICAgOiB7ICooLnJlbC5wbHQpCQl9Ci0gIC5yZWxhLnBsdCAgICAgIDogeyAqKC5yZWxhLnBsdCkJCX0KLSAgLmluaXQgICAgICAgICAgOiB7ICooLmluaXQpCX0KLSAgLnBsdCA6IHsgKigucGx0KSB9Ci0gIC50ZXh0ICAgICAgOgotICB7Ci0gICAgY3B1L3BwYzR4eC9zdGFydC5vCSgudGV4dCkKLQotICAgICooLnRleHQpCi0gICAgKiguZ290MSkKLSAgfQotICBfZXRleHQgPSAuOwotICBQUk9WSURFIChldGV4dCA9IC4pOwotICAucm9kYXRhICAgIDoKLSAgewotICAgICooU09SVF9CWV9BTElHTk1FTlQoU09SVF9CWV9OQU1FKC5yb2RhdGEqKSkpCi0gIH0KLSAgLmZpbmkgICAgICA6IHsgKiguZmluaSkgICAgfSA9MAotICAuY3RvcnMgICAgIDogeyAqKC5jdG9ycykgICB9Ci0gIC5kdG9ycyAgICAgOiB7ICooLmR0b3JzKSAgIH0KLQotICAvKiBSZWFkLXdyaXRlIHNlY3Rpb24sIG1lcmdlZCBpbnRvIGRhdGEgc2VnbWVudDogKi8KLSAgLiA9ICguICsgMHgwMEZGKSAmIDB4RkZGRkZGMDA7Ci0gIF9lcm90ZXh0ID0gLjsKLSAgUFJPVklERSAoZXJvdGV4dCA9IC4pOwotICAucmVsb2MgICA6Ci0gIHsKLSAgICAqKC5nb3QpCi0gICAgX0dPVDJfVEFCTEVfID0gLjsKLSAgICAqKC5nb3QyKQotICAgIF9GSVhVUF9UQUJMRV8gPSAuOwotICAgICooLmZpeHVwKQotICB9Ci0gIF9fZ290Ml9lbnRyaWVzID0gKF9GSVhVUF9UQUJMRV8gLSBfR09UMl9UQUJMRV8pID4+MjsKLSAgX19maXh1cF9lbnRyaWVzID0gKC4gLSBfRklYVVBfVEFCTEVfKT4+MjsKLQotICAuZGF0YSAgICA6Ci0gIHsKLSAgICAqKC5kYXRhKQotICAgICooLmRhdGExKQotICAgICooLnNkYXRhKQotICAgICooLnNkYXRhMikKLSAgICAqKC5keW5hbWljKQotICAgIENPTlNUUlVDVE9SUwotICB9Ci0gIF9lZGF0YSAgPSAgLjsKLSAgUFJPVklERSAoZWRhdGEgPSAuKTsKLQotICAuID0gLjsKLSAgX191X2Jvb3RfY21kX3N0YXJ0ID0gLjsKLSAgLnVfYm9vdF9jbWQgOiB7ICooLnVfYm9vdF9jbWQpIH0KLSAgX191X2Jvb3RfY21kX2VuZCA9IC47Ci0KLSAgLiA9IC47Ci0gIF9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0gIF9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9iZWdpbiA9IC47Ci0gIC50ZXh0LmluaXQgOiB7ICooLnRleHQuaW5pdCkgfQotICAuZGF0YS5pbml0IDogeyAqKC5kYXRhLmluaXQpIH0KLSAgLiA9IEFMSUdOKDI1Nik7Ci0gIF9faW5pdF9lbmQgPSAuOwotCi0gIF9fYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyAoTk9MT0FEKSAgICAgICA6Ci0gIHsKLSAgICooLnNic3MpICooLnNjb21tb24pCi0gICAqKC5keW5ic3MpCi0gICAqKC5ic3MpCi0gICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQotICBfZW5kID0gLiA7Ci0gIFBST1ZJREUgKGVuZCA9IC4pOwotfQpkaWZmIC0tZ2l0IGEvY29tbW9uL01ha2VmaWxlIGIvY29tbW9uL01ha2VmaWxlCmluZGV4IDQ3ZjZhNzEuLjc3ODQxODAgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9NYWtlZmlsZQorKysgYi9jb21tb24vTWFrZWZpbGUKQEAgLTQ0LDcgKzQ0LDkgQEAKICMgY29yZSBjb21tYW5kCiBDT0JKUy15ICs9IGNtZF9ib290Lm8KIENPQkpTLXkgKz0gY21kX2Jvb3RtLm8KK0NPQkpTLXkgKz0gY21kX2hlbHAubwogQ09CSlMteSArPSBjbWRfbnZlZGl0Lm8KK0NPQkpTLXkgKz0gY21kX3ZlcnNpb24ubwogCiAjIGVudmlyb25tZW50CiBDT0JKUy15ICs9IGVudl9jb21tb24ubwpAQCAtODMsOSArODUsMTEgQEAKIGVuZGlmCiBDT0JKUy0kKENPTkZJR19DTURfRElTUExBWSkgKz0gY21kX2Rpc3BsYXkubwogQ09CSlMtJChDT05GSUdfQ01EX0RUVCkgKz0gY21kX2R0dC5vCitDT0JKUy0kKENPTkZJR19DTURfRUNITykgKz0gY21kX2VjaG8ubwogQ09CSlMtJChDT05GSUdfRU5WX0lTX0lOX0VFUFJPTSkgKz0gY21kX2VlcHJvbS5vCiBDT0JKUy0kKENPTkZJR19DTURfRUVQUk9NKSArPSBjbWRfZWVwcm9tLm8KIENPQkpTLSQoQ09ORklHX0NNRF9FTEYpICs9IGNtZF9lbGYubworQ09CSlMtJChDT05GSUdfU1lTX0hVU0hfUEFSU0VSKSArPSBjbWRfZXhpdC5vCiBDT0JKUy0kKENPTkZJR19DTURfRVhUMikgKz0gY21kX2V4dDIubwogQ09CSlMtJChDT05GSUdfQ01EX0ZBVCkgKz0gY21kX2ZhdC5vCiBDT0JKUy0kKENPTkZJR19DTURfRkRDKSQoQ09ORklHX0NNRF9GRE9TKSArPSBjbWRfZmRjLm8KQEAgLTExNSw3ICsxMTksNyBAQAogQ09CSlMtJChDT05GSUdfQ01EX01NQykgKz0gY21kX21tYy5vCiBDT0JKUy0kKENPTkZJR19NUCkgKz0gY21kX21wLm8KIENPQkpTLSQoQ09ORklHX0NNRF9NVERQQVJUUykgKz0gY21kX210ZHBhcnRzLm8KLUNPQkpTLXkgKz0gY21kX25hbmQubworQ09CSlMtJChDT05GSUdfQ01EX05BTkQpICs9IGNtZF9uYW5kLm8KIENPQkpTLSQoQ09ORklHX0NNRF9ORVQpICs9IGNtZF9uZXQubwogQ09CSlMtJChDT05GSUdfQ01EX09ORU5BTkQpICs9IGNtZF9vbmVuYW5kLm8KIENPQkpTLSQoQ09ORklHX0NNRF9PVFApICs9IGNtZF9vdHAubwpAQCAtMTM0LDYgKzEzOCw3IEBACiBDT0JKUy0kKENPTkZJR19DTURfU1BJQk9PVExEUikgKz0gY21kX3NwaWJvb3RsZHIubwogQ09CSlMtJChDT05GSUdfQ01EX1NUUklOR1MpICs9IGNtZF9zdHJpbmdzLm8KIENPQkpTLSQoQ09ORklHX0NNRF9URVJNSU5BTCkgKz0gY21kX3Rlcm1pbmFsLm8KK0NPQkpTLSQoQ09ORklHX1NZU19IVVNIX1BBUlNFUikgKz0gY21kX3Rlc3QubwogQ09CSlMtJChDT05GSUdfQ01EX1RTSTE0OCkgKz0gY21kX3RzaTE0OC5vCiBDT0JKUy0kKENPTkZJR19DTURfVUJJKSArPSBjbWRfdWJpLm8KIENPQkpTLSQoQ09ORklHX0NNRF9VQklGUykgKz0gY21kX3ViaWZzLm8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfYm9vdG0uYyBiL2NvbW1vbi9jbWRfYm9vdG0uYwppbmRleCBlMTY1NTJlLi5lZmQ2YWVjIDEwMDY0NAotLS0gYS9jb21tb24vY21kX2Jvb3RtLmMKKysrIGIvY29tbW9uL2NtZF9ib290bS5jCkBAIC01Nyw2ICs1NywxMCBAQAogI2luY2x1ZGUgPGx6bWEvTHptYVRvb2xzLmg+CiAjZW5kaWYgLyogQ09ORklHX0xaTUEgKi8KIAorI2lmZGVmIENPTkZJR19MWk8KKyNpbmNsdWRlIDxsaW51eC9sem8uaD4KKyNlbmRpZiAvKiBDT05GSUdfTFpPICovCisKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCiBleHRlcm4gaW50IGd1bnppcCAodm9pZCAqZHN0LCBpbnQgZHN0bGVuLCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGxvbmcgKmxlbnApOwpAQCAtNDA1LDYgKzQwOSwyNCBAQAogCQkqbG9hZF9lbmQgPSBsb2FkICsgdW5jX2xlbjsKIAkJYnJlYWs7CiAjZW5kaWYgLyogQ09ORklHX0xaTUEgKi8KKyNpZmRlZiBDT05GSUdfTFpPCisJY2FzZSBJSF9DT01QX0xaTzoKKwkJcHJpbnRmICgiICAgVW5jb21wcmVzc2luZyAlcyAuLi4gIiwgdHlwZV9uYW1lKTsKKworCQlpbnQgcmV0ID0gbHpvcF9kZWNvbXByZXNzKChjb25zdCB1bnNpZ25lZCBjaGFyICopaW1hZ2Vfc3RhcnQsCisJCQkJCSAgaW1hZ2VfbGVuLCAodW5zaWduZWQgY2hhciAqKWxvYWQsCisJCQkJCSAgJnVuY19sZW4pOworCQlpZiAocmV0ICE9IExaT19FX09LKSB7CisJCQlwcmludGYgKCJMWk86IHVuY29tcHJlc3Mgb3Igb3ZlcndyaXRlIGVycm9yICVkICIKKwkJCSAgICAgICItIG11c3QgUkVTRVQgYm9hcmQgdG8gcmVjb3ZlclxuIiwgcmV0KTsKKwkJCWlmIChib290X3Byb2dyZXNzKQorCQkJCXNob3dfYm9vdF9wcm9ncmVzcyAoLTYpOworCQkJcmV0dXJuIEJPT1RNX0VSUl9SRVNFVDsKKwkJfQorCisJCSpsb2FkX2VuZCA9IGxvYWQgKyB1bmNfbGVuOworCQlicmVhazsKKyNlbmRpZiAvKiBDT05GSUdfTFpPICovCiAJZGVmYXVsdDoKIAkJcHJpbnRmICgiVW5pbXBsZW1lbnRlZCBjb21wcmVzc2lvbiB0eXBlICVkXG4iLCBjb21wKTsKIAkJcmV0dXJuIEJPT1RNX0VSUl9VTklNUExFTUVOVEVEOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9lY2hvLmMgYi9jb21tb24vY21kX2VjaG8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWM0ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL2NtZF9lY2hvLmMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMDkKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKworaW50IGRvX2VjaG8oY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGk7CisJaW50IHB1dG5sID0gMTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY2hhciAqcCA9IGFyZ3ZbaV0sIGM7CisKKwkJaWYgKGkgPiAxKQorCQkJcHV0YygnICcpOworCQl3aGlsZSAoKGMgPSAqcCsrKSAhPSAnXDAnKSB7CisJCQlpZiAoYyA9PSAnXFwnICYmICpwID09ICdjJykgeworCQkJCXB1dG5sID0gMDsKKwkJCQlwKys7CisJCQl9IGVsc2UgeworCQkJCXB1dGMoYyk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAocHV0bmwpCisJCXB1dGMoJ1xuJyk7CisKKwlyZXR1cm4gMDsKK30KKworVV9CT09UX0NNRCgKKwllY2hvLAlDT05GSUdfU1lTX01BWEFSR1MsCTEsCWRvX2VjaG8sCisJImVjaG8gYXJncyB0byBjb25zb2xlIiwKKwkiW2FyZ3MuLl1cbiIKKwkiICAgIC0gZWNobyBhcmdzIHRvIGNvbnNvbGU7IFxcYyBzdXBwcmVzc2VzIG5ld2xpbmUiCispOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NtZF9leGl0LmMgYi9jb21tb24vY21kX2V4aXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDg3NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uL2NtZF9leGl0LmMKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAwLTIwMDkKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKworaW50IGRvX2V4aXQoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHI7CisKKwlyID0gMDsKKwlpZiAoYXJnYyA+IDEpCisJCXIgPSBzaW1wbGVfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxMCk7CisKKwlyZXR1cm4gLXIgLSAyOworfQorCitVX0JPT1RfQ01EKAorCWV4aXQsCTIsCTEsCWRvX2V4aXQsCisJImV4aXQgc2NyaXB0IiwKKwkiIgorKTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfaGVscC5jIGIvY29tbW9uL2NtZF9oZWxwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg2MGRmYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9jbWRfaGVscC5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMC0yMDA5CisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisKK2ludCBkb19oZWxwKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlyZXR1cm4gX2RvX2hlbHAoJl9fdV9ib290X2NtZF9zdGFydCwKKwkJCSZfX3VfYm9vdF9jbWRfZW5kIC0gJl9fdV9ib290X2NtZF9zdGFydCwKKwkJCWNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2KTsKK30KKworVV9CT09UX0NNRCgKKwloZWxwLAlDT05GSUdfU1lTX01BWEFSR1MsCTEsCWRvX2hlbHAsCisJInByaW50IGNvbW1hbmQgZGVzY3JpcHRpb24vdXNhZ2UiLAorCSJcbiIKKwkiCS0gcHJpbnQgYnJpZWYgZGVzY3JpcHRpb24gb2YgYWxsIGNvbW1hbmRzXG4iCisJImhlbHAgY29tbWFuZCAuLi5cbiIKKwkiCS0gcHJpbnQgZGV0YWlsZWQgdXNhZ2Ugb2YgJ2NvbW1hbmQnIgorKTsKKworLyogVGhpcyBkb2VzIG5vdCB1c2UgdGhlIFVfQk9PVF9DTUQgbWFjcm8gYXMgPyBjYW4ndCBiZSB1c2VkIGluIHN5bWJvbCBuYW1lcyAqLworY21kX3RibF90IF9fdV9ib290X2NtZF9xdWVzdGlvbl9tYXJrIFN0cnVjdF9TZWN0aW9uID0geworCSI/IiwJQ09ORklHX1NZU19NQVhBUkdTLAkxLAlkb19oZWxwLAorCSJhbGlhcyBmb3IgJ2hlbHAnIiwKKyNpZmRlZiAgQ09ORklHX1NZU19MT05HSEVMUAorCSIiCisjZW5kaWYgLyogQ09ORklHX1NZU19MT05HSEVMUCAqLworfTsKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfbmFuZC5jIGIvY29tbW9uL2NtZF9uYW5kLmMKaW5kZXggMTU4YTU1Zi4uMDc1YThhZiAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9uYW5kLmMKKysrIGIvY29tbW9uL2NtZF9uYW5kLmMKQEAgLTksMTggKzksNyBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KLQotCi0vKgotICoKLSAqIE5ldyBOQU5EIHN1cHBvcnQKLSAqCi0gKi8KLSNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfTkFORCkKLQogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDx3YXRjaGRvZy5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgpAQCAtNjg2LDQgKzY3NSwzIEBACiAJImJvb3QgZnJvbSBOQU5EIGRldmljZSIsCiAJIltwYXJ0aXRpb25dIHwgW1tbbG9hZEFkZHJdIGRldl0gb2Zmc2V0XSIKICk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfdGVzdC5jIGIvY29tbW9uL2NtZF90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4NmY4OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi9jbWRfdGVzdC5jCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAwOQorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorCitpbnQgZG9fdGVzdChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyICoqYXA7CisJaW50IGxlZnQsIGFkdiwgZXhwciwgbGFzdF9leHByLCBuZWcsIGxhc3RfY21wOworCisJLyogYXJncz8gKi8KKwlpZiAoYXJnYyA8IDMpCisJCXJldHVybiAxOworCisjaWYgMAorCXsKKwkJcHJpbnRmKCJ0ZXN0OiIpOworCQlsZWZ0ID0gMTsKKwkJd2hpbGUgKGFyZ3ZbbGVmdF0pCisJCQlwcmludGYoIiAlcyIsIGFyZ3ZbbGVmdCsrXSk7CisJfQorI2VuZGlmCisKKwlsYXN0X2V4cHIgPSAwOworCWxlZnQgPSBhcmdjIC0gMTsgYXAgPSBhcmd2ICsgMTsKKwlpZiAobGVmdCA+IDAgJiYgc3RyY21wKGFwWzBdLCAiISIpID09IDApIHsKKwkJbmVnID0gMTsKKwkJYXArKzsKKwkJbGVmdC0tOworCX0gZWxzZQorCQluZWcgPSAwOworCisJZXhwciA9IC0xOworCWxhc3RfY21wID0gLTE7CisJbGFzdF9leHByID0gLTE7CisJd2hpbGUgKGxlZnQgPiAwKSB7CisKKwkJaWYgKHN0cmNtcChhcFswXSwgIi1vIikgPT0gMCB8fCBzdHJjbXAoYXBbMF0sICItYSIpID09IDApCisJCQlhZHYgPSAxOworCQllbHNlIGlmIChzdHJjbXAoYXBbMF0sICIteiIpID09IDAgfHwgc3RyY21wKGFwWzBdLCAiLW4iKSA9PSAwKQorCQkJYWR2ID0gMjsKKwkJZWxzZQorCQkJYWR2ID0gMzsKKworCQlpZiAobGVmdCA8IGFkdikgeworCQkJZXhwciA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChhZHYgPT0gMSkgeworCQkJaWYgKHN0cmNtcChhcFswXSwgIi1vIikgPT0gMCkgeworCQkJCWxhc3RfZXhwciA9IGV4cHI7CisJCQkJbGFzdF9jbXAgPSAwOworCQkJfSBlbHNlIGlmIChzdHJjbXAoYXBbMF0sICItYSIpID09IDApIHsKKwkJCQlsYXN0X2V4cHIgPSBleHByOworCQkJCWxhc3RfY21wID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJZXhwciA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoYWR2ID09IDIpIHsKKwkJCWlmIChzdHJjbXAoYXBbMF0sICIteiIpID09IDApCisJCQkJZXhwciA9IHN0cmxlbihhcFsxXSkgPT0gMCA/IDEgOiAwOworCQkJZWxzZSBpZiAoc3RyY21wKGFwWzBdLCAiLW4iKSA9PSAwKQorCQkJCWV4cHIgPSBzdHJsZW4oYXBbMV0pID09IDAgPyAwIDogMTsKKwkJCWVsc2UgeworCQkJCWV4cHIgPSAxOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAobGFzdF9jbXAgPT0gMCkKKwkJCQlleHByID0gbGFzdF9leHByIHx8IGV4cHI7CisJCQllbHNlIGlmIChsYXN0X2NtcCA9PSAxKQorCQkJCWV4cHIgPSBsYXN0X2V4cHIgJiYgZXhwcjsKKwkJCWxhc3RfY21wID0gLTE7CisJCX0KKworCQlpZiAoYWR2ID09IDMpIHsKKwkJCWlmIChzdHJjbXAoYXBbMV0sICI9IikgPT0gMCkKKwkJCQlleHByID0gc3RyY21wKGFwWzBdLCBhcFsyXSkgPT0gMDsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcFsxXSwgIiE9IikgPT0gMCkKKwkJCQlleHByID0gc3RyY21wKGFwWzBdLCBhcFsyXSkgIT0gMDsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcFsxXSwgIj4iKSA9PSAwKQorCQkJCWV4cHIgPSBzdHJjbXAoYXBbMF0sIGFwWzJdKSA+IDA7CisJCQllbHNlIGlmIChzdHJjbXAoYXBbMV0sICI8IikgPT0gMCkKKwkJCQlleHByID0gc3RyY21wKGFwWzBdLCBhcFsyXSkgPCAwOworCQkJZWxzZSBpZiAoc3RyY21wKGFwWzFdLCAiLWVxIikgPT0gMCkKKwkJCQlleHByID0gc2ltcGxlX3N0cnRvbChhcFswXSwgTlVMTCwgMTApID09IHNpbXBsZV9zdHJ0b2woYXBbMl0sIE5VTEwsIDEwKTsKKwkJCWVsc2UgaWYgKHN0cmNtcChhcFsxXSwgIi1uZSIpID09IDApCisJCQkJZXhwciA9IHNpbXBsZV9zdHJ0b2woYXBbMF0sIE5VTEwsIDEwKSAhPSBzaW1wbGVfc3RydG9sKGFwWzJdLCBOVUxMLCAxMCk7CisJCQllbHNlIGlmIChzdHJjbXAoYXBbMV0sICItbHQiKSA9PSAwKQorCQkJCWV4cHIgPSBzaW1wbGVfc3RydG9sKGFwWzBdLCBOVUxMLCAxMCkgPCBzaW1wbGVfc3RydG9sKGFwWzJdLCBOVUxMLCAxMCk7CisJCQllbHNlIGlmIChzdHJjbXAoYXBbMV0sICItbGUiKSA9PSAwKQorCQkJCWV4cHIgPSBzaW1wbGVfc3RydG9sKGFwWzBdLCBOVUxMLCAxMCkgPD0gc2ltcGxlX3N0cnRvbChhcFsyXSwgTlVMTCwgMTApOworCQkJZWxzZSBpZiAoc3RyY21wKGFwWzFdLCAiLWd0IikgPT0gMCkKKwkJCQlleHByID0gc2ltcGxlX3N0cnRvbChhcFswXSwgTlVMTCwgMTApID4gc2ltcGxlX3N0cnRvbChhcFsyXSwgTlVMTCwgMTApOworCQkJZWxzZSBpZiAoc3RyY21wKGFwWzFdLCAiLWdlIikgPT0gMCkKKwkJCQlleHByID0gc2ltcGxlX3N0cnRvbChhcFswXSwgTlVMTCwgMTApID49IHNpbXBsZV9zdHJ0b2woYXBbMl0sIE5VTEwsIDEwKTsKKwkJCWVsc2UgeworCQkJCWV4cHIgPSAxOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAobGFzdF9jbXAgPT0gMCkKKwkJCQlleHByID0gbGFzdF9leHByIHx8IGV4cHI7CisJCQllbHNlIGlmIChsYXN0X2NtcCA9PSAxKQorCQkJCWV4cHIgPSBsYXN0X2V4cHIgJiYgZXhwcjsKKwkJCWxhc3RfY21wID0gLTE7CisJCX0KKworCQlhcCArPSBhZHY7IGxlZnQgLT0gYWR2OworCX0KKworCWlmIChuZWcpCisJCWV4cHIgPSAhZXhwcjsKKworCWV4cHIgPSAhZXhwcjsKKworCWRlYnVnICgiOiByZXR1cm5zICVkXG4iLCBleHByKTsKKworCXJldHVybiBleHByOworfQorCitVX0JPT1RfQ01EKAorCXRlc3QsCUNPTkZJR19TWVNfTUFYQVJHUywJMSwJZG9fdGVzdCwKKwkibWluaW1hbCB0ZXN0IGxpa2UgL2Jpbi9zaCIsCisJIlthcmdzLi5dIgorKTsKKworaW50IGRvX2ZhbHNlKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXJldHVybiAxOworfQorCitVX0JPT1RfQ01EKAorCWZhbHNlLAlDT05GSUdfU1lTX01BWEFSR1MsCTEsCWRvX2ZhbHNlLAorCSJkbyBub3RoaW5nLCB1bnN1Y2Nlc3NmdWxseSIsCisJTlVMTAorKTsKKworaW50IGRvX3RydWUoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJcmV0dXJuIDA7Cit9CisKK1VfQk9PVF9DTUQoCisJdHJ1ZSwJQ09ORklHX1NZU19NQVhBUkdTLAkxLAlkb190cnVlLAorCSJkbyBub3RoaW5nLCBzdWNjZXNzZnVsbHkiLAorCU5VTEwKKyk7CmRpZmYgLS1naXQgYS9jb21tb24vY21kX3ZlcnNpb24uYyBiL2NvbW1vbi9jbWRfdmVyc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMTY1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vY21kX3ZlcnNpb24uYwpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDAtMjAwOQorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorCitleHRlcm4gY2hhciB2ZXJzaW9uX3N0cmluZ1tdOworCitpbnQgZG9fdmVyc2lvbihjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlwcmludGYoIlxuJXNcbiIsIHZlcnNpb25fc3RyaW5nKTsKKworCXJldHVybiAwOworfQorCitVX0JPT1RfQ01EKAorCXZlcnNpb24sCTEsCQkxLAlkb192ZXJzaW9uLAorCSJwcmludCBtb25pdG9yIHZlcnNpb24iLAorCSIiCispOwpkaWZmIC0tZ2l0IGEvY29tbW9uL2NvbW1hbmQuYyBiL2NvbW1vbi9jb21tYW5kLmMKaW5kZXggYjU3ZjhkZi4uMGM2NmI3YSAxMDA2NDQKLS0tIGEvY29tbW9uL2NvbW1hbmQuYworKysgYi9jb21tb24vY29tbWFuZC5jCkBAIC0yOCwyMDYgKzI4LDYgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+CiAKLWludAotZG9fdmVyc2lvbiAoY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0JZXh0ZXJuIGNoYXIgdmVyc2lvbl9zdHJpbmdbXTsKLQlwcmludGYgKCJcbiVzXG4iLCB2ZXJzaW9uX3N0cmluZyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLVVfQk9PVF9DTUQoCi0JdmVyc2lvbiwJMSwJCTEsCWRvX3ZlcnNpb24sCi0JInByaW50IG1vbml0b3IgdmVyc2lvbiIsCi0JIiIKLSk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfRUNITykKLQotaW50Ci1kb19lY2hvIChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlpbnQgaSwgcHV0bmwgPSAxOwotCi0JZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewotCQljaGFyICpwID0gYXJndltpXSwgYzsKLQotCQlpZiAoaSA+IDEpCi0JCQlwdXRjKCcgJyk7Ci0JCXdoaWxlICgoYyA9ICpwKyspICE9ICdcMCcpIHsKLQkJCWlmIChjID09ICdcXCcgJiYgKnAgPT0gJ2MnKSB7Ci0JCQkJcHV0bmwgPSAwOwotCQkJCXArKzsKLQkJCX0gZWxzZSB7Ci0JCQkJcHV0YyhjKTsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChwdXRubCkKLQkJcHV0YygnXG4nKTsKLQlyZXR1cm4gMDsKLX0KLQotVV9CT09UX0NNRCgKLQllY2hvLAlDT05GSUdfU1lTX01BWEFSR1MsCTEsCWRvX2VjaG8sCi0JImVjaG8gYXJncyB0byBjb25zb2xlIiwKLQkiW2FyZ3MuLl1cbiIKLQkiICAgIC0gZWNobyBhcmdzIHRvIGNvbnNvbGU7IFxcYyBzdXBwcmVzc2VzIG5ld2xpbmUiCi0pOwotCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TWVNfSFVTSF9QQVJTRVIKLQotaW50Ci1kb190ZXN0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQljaGFyICoqYXA7Ci0JaW50IGxlZnQsIGFkdiwgZXhwciwgbGFzdF9leHByLCBuZWcsIGxhc3RfY21wOwotCi0JLyogYXJncz8gKi8KLQlpZiAoYXJnYyA8IDMpCi0JCXJldHVybiAxOwotCi0jaWYgMAotCXsKLQkJcHJpbnRmKCJ0ZXN0OiIpOwotCQlsZWZ0ID0gMTsKLQkJd2hpbGUgKGFyZ3ZbbGVmdF0pCi0JCQlwcmludGYoIiAlcyIsIGFyZ3ZbbGVmdCsrXSk7Ci0JfQotI2VuZGlmCi0KLQlsYXN0X2V4cHIgPSAwOwotCWxlZnQgPSBhcmdjIC0gMTsgYXAgPSBhcmd2ICsgMTsKLQlpZiAobGVmdCA+IDAgJiYgc3RyY21wKGFwWzBdLCAiISIpID09IDApIHsKLQkJbmVnID0gMTsKLQkJYXArKzsKLQkJbGVmdC0tOwotCX0gZWxzZQotCQluZWcgPSAwOwotCi0JZXhwciA9IC0xOwotCWxhc3RfY21wID0gLTE7Ci0JbGFzdF9leHByID0gLTE7Ci0Jd2hpbGUgKGxlZnQgPiAwKSB7Ci0KLQkJaWYgKHN0cmNtcChhcFswXSwgIi1vIikgPT0gMCB8fCBzdHJjbXAoYXBbMF0sICItYSIpID09IDApCi0JCQlhZHYgPSAxOwotCQllbHNlIGlmIChzdHJjbXAoYXBbMF0sICIteiIpID09IDAgfHwgc3RyY21wKGFwWzBdLCAiLW4iKSA9PSAwKQotCQkJYWR2ID0gMjsKLQkJZWxzZQotCQkJYWR2ID0gMzsKLQotCQlpZiAobGVmdCA8IGFkdikgewotCQkJZXhwciA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChhZHYgPT0gMSkgewotCQkJaWYgKHN0cmNtcChhcFswXSwgIi1vIikgPT0gMCkgewotCQkJCWxhc3RfZXhwciA9IGV4cHI7Ci0JCQkJbGFzdF9jbXAgPSAwOwotCQkJfSBlbHNlIGlmIChzdHJjbXAoYXBbMF0sICItYSIpID09IDApIHsKLQkJCQlsYXN0X2V4cHIgPSBleHByOwotCQkJCWxhc3RfY21wID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJZXhwciA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoYWR2ID09IDIpIHsKLQkJCWlmIChzdHJjbXAoYXBbMF0sICIteiIpID09IDApCi0JCQkJZXhwciA9IHN0cmxlbihhcFsxXSkgPT0gMCA/IDEgOiAwOwotCQkJZWxzZSBpZiAoc3RyY21wKGFwWzBdLCAiLW4iKSA9PSAwKQotCQkJCWV4cHIgPSBzdHJsZW4oYXBbMV0pID09IDAgPyAwIDogMTsKLQkJCWVsc2UgewotCQkJCWV4cHIgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAobGFzdF9jbXAgPT0gMCkKLQkJCQlleHByID0gbGFzdF9leHByIHx8IGV4cHI7Ci0JCQllbHNlIGlmIChsYXN0X2NtcCA9PSAxKQotCQkJCWV4cHIgPSBsYXN0X2V4cHIgJiYgZXhwcjsKLQkJCWxhc3RfY21wID0gLTE7Ci0JCX0KLQotCQlpZiAoYWR2ID09IDMpIHsKLQkJCWlmIChzdHJjbXAoYXBbMV0sICI9IikgPT0gMCkKLQkJCQlleHByID0gc3RyY21wKGFwWzBdLCBhcFsyXSkgPT0gMDsKLQkJCWVsc2UgaWYgKHN0cmNtcChhcFsxXSwgIiE9IikgPT0gMCkKLQkJCQlleHByID0gc3RyY21wKGFwWzBdLCBhcFsyXSkgIT0gMDsKLQkJCWVsc2UgaWYgKHN0cmNtcChhcFsxXSwgIj4iKSA9PSAwKQotCQkJCWV4cHIgPSBzdHJjbXAoYXBbMF0sIGFwWzJdKSA+IDA7Ci0JCQllbHNlIGlmIChzdHJjbXAoYXBbMV0sICI8IikgPT0gMCkKLQkJCQlleHByID0gc3RyY21wKGFwWzBdLCBhcFsyXSkgPCAwOwotCQkJZWxzZSBpZiAoc3RyY21wKGFwWzFdLCAiLWVxIikgPT0gMCkKLQkJCQlleHByID0gc2ltcGxlX3N0cnRvbChhcFswXSwgTlVMTCwgMTApID09IHNpbXBsZV9zdHJ0b2woYXBbMl0sIE5VTEwsIDEwKTsKLQkJCWVsc2UgaWYgKHN0cmNtcChhcFsxXSwgIi1uZSIpID09IDApCi0JCQkJZXhwciA9IHNpbXBsZV9zdHJ0b2woYXBbMF0sIE5VTEwsIDEwKSAhPSBzaW1wbGVfc3RydG9sKGFwWzJdLCBOVUxMLCAxMCk7Ci0JCQllbHNlIGlmIChzdHJjbXAoYXBbMV0sICItbHQiKSA9PSAwKQotCQkJCWV4cHIgPSBzaW1wbGVfc3RydG9sKGFwWzBdLCBOVUxMLCAxMCkgPCBzaW1wbGVfc3RydG9sKGFwWzJdLCBOVUxMLCAxMCk7Ci0JCQllbHNlIGlmIChzdHJjbXAoYXBbMV0sICItbGUiKSA9PSAwKQotCQkJCWV4cHIgPSBzaW1wbGVfc3RydG9sKGFwWzBdLCBOVUxMLCAxMCkgPD0gc2ltcGxlX3N0cnRvbChhcFsyXSwgTlVMTCwgMTApOwotCQkJZWxzZSBpZiAoc3RyY21wKGFwWzFdLCAiLWd0IikgPT0gMCkKLQkJCQlleHByID0gc2ltcGxlX3N0cnRvbChhcFswXSwgTlVMTCwgMTApID4gc2ltcGxlX3N0cnRvbChhcFsyXSwgTlVMTCwgMTApOwotCQkJZWxzZSBpZiAoc3RyY21wKGFwWzFdLCAiLWdlIikgPT0gMCkKLQkJCQlleHByID0gc2ltcGxlX3N0cnRvbChhcFswXSwgTlVMTCwgMTApID49IHNpbXBsZV9zdHJ0b2woYXBbMl0sIE5VTEwsIDEwKTsKLQkJCWVsc2UgewotCQkJCWV4cHIgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAobGFzdF9jbXAgPT0gMCkKLQkJCQlleHByID0gbGFzdF9leHByIHx8IGV4cHI7Ci0JCQllbHNlIGlmIChsYXN0X2NtcCA9PSAxKQotCQkJCWV4cHIgPSBsYXN0X2V4cHIgJiYgZXhwcjsKLQkJCWxhc3RfY21wID0gLTE7Ci0JCX0KLQotCQlhcCArPSBhZHY7IGxlZnQgLT0gYWR2OwotCX0KLQotCWlmIChuZWcpCi0JCWV4cHIgPSAhZXhwcjsKLQotCWV4cHIgPSAhZXhwcjsKLQotCWRlYnVnICgiOiByZXR1cm5zICVkXG4iLCBleHByKTsKLQotCXJldHVybiBleHByOwotfQotCi1VX0JPT1RfQ01EKAotCXRlc3QsCUNPTkZJR19TWVNfTUFYQVJHUywJMSwJZG9fdGVzdCwKLQkibWluaW1hbCB0ZXN0IGxpa2UgL2Jpbi9zaCIsCi0JIlthcmdzLi5dIgotKTsKLQotaW50Ci1kb19leGl0IChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlpbnQgcjsKLQotCXIgPSAwOwotCWlmIChhcmdjID4gMSkKLQkJciA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDEwKTsKLQotCXJldHVybiAtciAtIDI7Ci19Ci0KLVVfQk9PVF9DTUQoCi0JZXhpdCwJMiwJMSwJZG9fZXhpdCwKLQkiZXhpdCBzY3JpcHQiLAotCSIiCi0pOwotCi0KLSNlbmRpZgotCiAvKgogICogVXNlIHB1dHMoKSBpbnN0ZWFkIG9mIHByaW50ZigpIHRvIGF2b2lkIHByaW50ZiBidWZmZXIgb3ZlcmZsb3cKICAqIGZvciBsb25nIGhlbHAgbWVzc2FnZXMKQEAgLTI5NywzOSArOTcsNiBAQAogCXJldHVybiByY29kZTsKIH0KIAotaW50IGRvX2hlbHAgKGNtZF90YmxfdCAqIGNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlyZXR1cm4gX2RvX2hlbHAoJl9fdV9ib290X2NtZF9zdGFydCwKLQkJCSZfX3VfYm9vdF9jbWRfZW5kIC0gJl9fdV9ib290X2NtZF9zdGFydCwKLQkJCWNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2KTsKLX0KLQotCi1VX0JPT1RfQ01EKAotCWhlbHAsCUNPTkZJR19TWVNfTUFYQVJHUywJMSwJZG9faGVscCwKLQkicHJpbnQgb25saW5lIGhlbHAiLAotCSJbY29tbWFuZCAuLi5dXG4iCi0JIiAgICAtIHNob3cgaGVscCBpbmZvcm1hdGlvbiAoZm9yICdjb21tYW5kJylcbiIKLQkiJ2hlbHAnIHByaW50cyBvbmxpbmUgaGVscCBmb3IgdGhlIG1vbml0b3IgY29tbWFuZHMuXG5cbiIKLQkiV2l0aG91dCBhcmd1bWVudHMsIGl0IHByaW50cyBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgZm9yIGFsbCBjb21tYW5kcy5cblxuIgotCSJUbyBnZXQgZGV0YWlsZWQgaGVscCBpbmZvcm1hdGlvbiBmb3Igc3BlY2lmaWMgY29tbWFuZHMgeW91IGNhbiB0eXBlXG4iCi0JIidoZWxwJyB3aXRoIG9uZSBvciBtb3JlIGNvbW1hbmQgbmFtZXMgYXMgYXJndW1lbnRzLiIKLSk7Ci0KLS8qIFRoaXMgZG9lcyBub3QgdXNlIHRoZSBVX0JPT1RfQ01EIG1hY3JvIGFzID8gY2FuJ3QgYmUgdXNlZCBpbiBzeW1ib2wgbmFtZXMgKi8KLSNpZmRlZiAgQ09ORklHX1NZU19MT05HSEVMUAotY21kX3RibF90IF9fdV9ib290X2NtZF9xdWVzdGlvbl9tYXJrIFN0cnVjdF9TZWN0aW9uID0gewotCSI/IiwJQ09ORklHX1NZU19NQVhBUkdTLAkxLAlkb19oZWxwLAotCSJhbGlhcyBmb3IgJ2hlbHAnIiwKLQkiIgotfTsKLSNlbHNlCi1jbWRfdGJsX3QgX191X2Jvb3RfY21kX3F1ZXN0aW9uX21hcmsgU3RydWN0X1NlY3Rpb24gPSB7Ci0JIj8iLAlDT05GSUdfU1lTX01BWEFSR1MsCTEsCWRvX2hlbHAsCi0JImFsaWFzIGZvciAnaGVscCciCi19OwotI2VuZGlmIC8qIENPTkZJR19TWVNfTE9OR0hFTFAgKi8KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZmluZCBjb21tYW5kIHRhYmxlIGVudHJ5IGZvciBhIGNvbW1hbmQKICAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uL2RsbWFsbG9jLmMgYi9jb21tb24vZGxtYWxsb2MuYwppbmRleCBjYTA4OGExLi43MzViMzQ0IDEwMDY0NAotLS0gYS9jb21tb24vZGxtYWxsb2MuYworKysgYi9jb21tb24vZGxtYWxsb2MuYwpAQCAtMTUyMiwxMSArMTUyMiw2IEBACiAJcmV0dXJuICh2b2lkICopb2xkOwogfQogCi0jaWZuZGVmIENPTkZJR19YODYKLS8qCi0gKiB4ODYgYm9hcmRzIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBpbml0IHNlcXVlbmNlIHRodXMgdGhleSBpbXBsZW1lbnQKLSAqIHRoZWlyIG93biB2ZXJzaW9uIG9mIG1lbV9tYWxsb2NfaW5pdCgpCi0gKi8KIHZvaWQgbWVtX21hbGxvY19pbml0KHVsb25nIHN0YXJ0LCB1bG9uZyBzaXplKQogewogCW1lbV9tYWxsb2Nfc3RhcnQgPSBzdGFydDsKQEAgLTE1MzUsNyArMTUzMCw2IEBACiAKIAltZW1zZXQoKHZvaWQgKiltZW1fbWFsbG9jX3N0YXJ0LCAwLCBzaXplKTsKIH0KLSNlbmRpZgogCiAvKiBmaWVsZC1leHRyYWN0aW9uIG1hY3JvcyAqLwogCmRpZmYgLS1naXQgYS9jb21tb24vZW52X29uZW5hbmQuYyBiL2NvbW1vbi9lbnZfb25lbmFuZC5jCmluZGV4IGRjZjA5ZGUuLjIzZDJjYWEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9lbnZfb25lbmFuZC5jCisrKyBiL2NvbW1vbi9lbnZfb25lbmFuZC5jCkBAIC02MCwxMSArNjAsMTQgQEAKIHZvaWQgZW52X3JlbG9jYXRlX3NwZWModm9pZCkKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9ICZvbmVuYW5kX210ZDsKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gJm9uZW5hbmRfY2hpcDsKIAlsb2ZmX3QgZW52X2FkZHI7CiAJaW50IHVzZV9kZWZhdWx0ID0gMDsKIAlzaXplX3QgcmV0bGVuOwogCiAJZW52X2FkZHIgPSBDT05GSUdfRU5WX0FERFI7CisJaWYgKEZMRVhPTkVOQU5EKHRoaXMpKQorCQllbnZfYWRkciA9IENPTkZJR19FTlZfQUREUl9GTEVYOwogCiAJLyogQ2hlY2sgT25lTkFORCBleGlzdCAqLwogCWlmIChtdGQtPndyaXRlc2l6ZSkKQEAgLTkxLDYgKzk0LDcgQEAKIGludCBzYXZlZW52KHZvaWQpCiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQgPSAmb25lbmFuZF9tdGQ7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9ICZvbmVuYW5kX2NoaXA7CiAJbG9mZl90IGVudl9hZGRyID0gQ09ORklHX0VOVl9BRERSOwogCXN0cnVjdCBlcmFzZV9pbmZvIGluc3RyID0gewogCQkuY2FsbGJhY2sJPSBOVUxMLApAQCAtOTgsNiArMTAyLDEyIEBACiAJc2l6ZV90IHJldGxlbjsKIAogCWluc3RyLmxlbiA9IENPTkZJR19FTlZfU0laRTsKKwlpZiAoRkxFWE9ORU5BTkQodGhpcykpIHsKKwkJZW52X2FkZHIgPSBDT05GSUdfRU5WX0FERFJfRkxFWDsKKwkJaW5zdHIubGVuID0gQ09ORklHX0VOVl9TSVpFX0ZMRVg7CisJCWluc3RyLmxlbiA8PD0gb25lbmFuZF9tdGQuZXJhc2VyZWdpb25zWzBdLm51bWJsb2NrcyA9PSAxID8KKwkJCQkxIDogMDsKKwl9CiAJaW5zdHIuYWRkciA9IGVudl9hZGRyOwogCWluc3RyLm10ZCA9IG10ZDsKIAlpZiAobXRkLT5lcmFzZShtdGQsICZpbnN0cikpIHsKZGlmZiAtLWdpdCBhL2NvbW1vbi9leHBvcnRzLmMgYi9jb21tb24vZXhwb3J0cy5jCmluZGV4IGIzYjZlMWYuLjYwYmJhNzUgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9leHBvcnRzLmMKKysrIGIvY29tbW9uL2V4cG9ydHMuYwpAQCAtMTIsMzggKzEyLDM0IEBACiAJcmV0dXJuIFhGX1ZFUlNJT047CiB9CiAKLXZvaWQganVtcHRhYmxlX2luaXQgKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlnZC0+anQgPSAodm9pZCAqKikgbWFsbG9jIChYRl9NQVggKiBzaXplb2YgKHZvaWQgKikpOwotCWZvciAoaSA9IDA7IGkgPCBYRl9NQVg7IGkrKykKLQkJZ2QtPmp0W2ldID0gKHZvaWQgKikgZHVtbXk7CisvKiBSZXVzZSBfZXhwb3J0cy5oIHdpdGggYSBsaXR0bGUgdHJpY2tlcnkgdG8gYXZvaWQgYml0cm90ICovCisjZGVmaW5lIEVYUE9SVF9GVU5DKHN5bSkgZ2QtPmp0W1hGXyMjc3ltXSA9ICh2b2lkICopc3ltOwogCi0JZ2QtPmp0W1hGX2dldF92ZXJzaW9uXSA9ICh2b2lkICopIGdldF92ZXJzaW9uOwotCWdkLT5qdFtYRl9tYWxsb2NdID0gKHZvaWQgKikgbWFsbG9jOwotCWdkLT5qdFtYRl9mcmVlXSA9ICh2b2lkICopIGZyZWU7Ci0JZ2QtPmp0W1hGX2dldGVudl0gPSAodm9pZCAqKSBnZXRlbnY7Ci0JZ2QtPmp0W1hGX3NldGVudl0gPSAodm9pZCAqKSBzZXRlbnY7Ci0JZ2QtPmp0W1hGX2dldF90aW1lcl0gPSAodm9pZCAqKSBnZXRfdGltZXI7Ci0JZ2QtPmp0W1hGX3NpbXBsZV9zdHJ0b3VsXSA9ICh2b2lkICopIHNpbXBsZV9zdHJ0b3VsOwotCWdkLT5qdFtYRl91ZGVsYXldID0gKHZvaWQgKikgdWRlbGF5OwotCWdkLT5qdFtYRl9zaW1wbGVfc3RydG9sXSA9ICh2b2lkICopIHNpbXBsZV9zdHJ0b2w7Ci0JZ2QtPmp0W1hGX3N0cmNtcF0gPSAodm9pZCAqKSBzdHJjbXA7Ci0jaWYgZGVmaW5lZChDT05GSUdfSTM4NikgfHwgZGVmaW5lZChDT05GSUdfUFBDKQotCWdkLT5qdFtYRl9pbnN0YWxsX2hkbHJdID0gKHZvaWQgKikgaXJxX2luc3RhbGxfaGFuZGxlcjsKLQlnZC0+anRbWEZfZnJlZV9oZGxyXSA9ICh2b2lkICopIGlycV9mcmVlX2hhbmRsZXI7Ci0jZW5kaWYJLyogSTM4NiB8fCBQUEMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19DTURfSTJDKQotCWdkLT5qdFtYRl9pMmNfd3JpdGVdID0gKHZvaWQgKikgaTJjX3dyaXRlOwotCWdkLT5qdFtYRl9pMmNfcmVhZF0gPSAodm9pZCAqKSBpMmNfcmVhZDsKKyNpZiAhZGVmaW5lZChDT05GSUdfSTM4NikgJiYgIWRlZmluZWQoQ09ORklHX1BQQykKKyMgZGVmaW5lIGluc3RhbGxfaGRsciAgICAgIGR1bW15CisjIGRlZmluZSBmcmVlX2hkbHIgICAgICAgICBkdW1teQorI2Vsc2UgLyoga2x1ZGdlIGZvciBub24tc3RhbmRhcmQgZnVuY3Rpb24gbmFtaW5nICovCisjIGRlZmluZSBpbnN0YWxsX2hkbHIgICAgICBpcnFfaW5zdGFsbF9oYW5kbGVyCisjIGRlZmluZSBmcmVlX2hkbHIgICAgICAgICBpcnFfZnJlZV9oYW5kbGVyCisjZW5kaWYKKyNpZm5kZWYgQ09ORklHX0NNRF9JMkMKKyMgZGVmaW5lIGkyY193cml0ZSAgICAgICAgIGR1bW15CisjIGRlZmluZSBpMmNfcmVhZCAgICAgICAgICBkdW1teQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0NNRF9TUEkKLQlnZC0+anRbWEZfc3BpX2luaXRdID0gKHZvaWQgKikgc3BpX2luaXQ7Ci0JZ2QtPmp0W1hGX3NwaV9zZXR1cF9zbGF2ZV0gPSAodm9pZCAqKSBzcGlfc2V0dXBfc2xhdmU7Ci0JZ2QtPmp0W1hGX3NwaV9mcmVlX3NsYXZlXSA9ICh2b2lkICopIHNwaV9mcmVlX3NsYXZlOwotCWdkLT5qdFtYRl9zcGlfY2xhaW1fYnVzXSA9ICh2b2lkICopIHNwaV9jbGFpbV9idXM7Ci0JZ2QtPmp0W1hGX3NwaV9yZWxlYXNlX2J1c10gPSAodm9pZCAqKSBzcGlfcmVsZWFzZV9idXM7Ci0JZ2QtPmp0W1hGX3NwaV94ZmVyXSA9ICh2b2lkICopIHNwaV94ZmVyOworI2lmbmRlZiBDT05GSUdfQ01EX1NQSQorIyBkZWZpbmUgc3BpX2luaXQgICAgICAgICAgZHVtbXkKKyMgZGVmaW5lIHNwaV9zZXR1cF9zbGF2ZSAgIGR1bW15CisjIGRlZmluZSBzcGlfZnJlZV9zbGF2ZSAgICBkdW1teQorIyBkZWZpbmUgc3BpX2NsYWltX2J1cyAgICAgZHVtbXkKKyMgZGVmaW5lIHNwaV9yZWxlYXNlX2J1cyAgIGR1bW15CisjIGRlZmluZSBzcGlfeGZlciAgICAgICAgICBkdW1teQogI2VuZGlmCisjaWZuZGVmIENPTkZJR19IQVNfVUlECisjIGRlZmluZSBmb3JjZWVudiAgICAgICAgICBkdW1teQorI2VuZGlmCisKK3ZvaWQganVtcHRhYmxlX2luaXQodm9pZCkKK3sKKwlnZC0+anQgPSBtYWxsb2MoWEZfTUFYICogc2l6ZW9mKHZvaWQgKikpOworI2luY2x1ZGUgPF9leHBvcnRzLmg+CiB9CmRpZmYgLS1naXQgYS9jb21tb24vaW1hZ2UuYyBiL2NvbW1vbi9pbWFnZS5jCmluZGV4IDZlYWY0MWUuLjVjYzNhYjQgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9pbWFnZS5jCisrKyBiL2NvbW1vbi9pbWFnZS5jCkBAIC0xNDgsNiArMTQ4LDcgQEAKIAl7CUlIX0NPTVBfQlpJUDIsCSJiemlwMiIsCSJiemlwMiBjb21wcmVzc2VkIiwJfSwKIAl7CUlIX0NPTVBfR1pJUCwJImd6aXAiLAkJImd6aXAgY29tcHJlc3NlZCIsCX0sCiAJewlJSF9DT01QX0xaTUEsCSJsem1hIiwJCSJsem1hIGNvbXByZXNzZWQiLAl9LAorCXsJSUhfQ09NUF9MWk8sCSJsem8iLAkJImx6byBjb21wcmVzc2VkIiwJfSwKIAl7CS0xLAkJIiIsCQkiIiwJCQl9LAogfTsKIApkaWZmIC0tZ2l0IGEvY29uZmlnLm1rIGIvY29uZmlnLm1rCmluZGV4IDhjZmQ2MGMuLmNiMWM0YWYgMTAwNjQ0Ci0tLSBhL2NvbmZpZy5taworKysgYi9jb25maWcubWsKQEAgLTQ2LDEzICs0Niw0MSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKK0hPU1RDRkxBR1MJPSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciBcCisJCSAgJChIT1NUQ1BQRkxBR1MpCitIT1NUU1RSSVAJPSBzdHJpcAorCisjCisjIE1hYyBPUyBYIC8gRGFyd2luJ3MgQyBwcmVwcm9jZXNzb3IgaXMgQXBwbGUgc3BlY2lmaWMuICBJdAorIyBnZW5lcmF0ZXMgbnVtZXJvdXMgZXJyb3JzIGFuZCB3YXJuaW5ncy4gIFdlIHdhbnQgdG8gYnlwYXNzIGl0CisjIGFuZCB1c2UgR05VIEMncyBjcHAuICBUbyBkbyB0aGlzIHdlIHBhc3MgdGhlIC10cmFkaXRpb25hbC1jcHAKKyMgb3B0aW9uIHRvIHRoZSBjb21waWxlci4gIE5vdGUgdGhhdCB0aGUgLXRyYWRpdGlvbmFsLWNwcCBmbGFnCisjIERPRVMgTk9UIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIEdOVSBDJ3MgZmxhZywgYWxsIGl0IGRvZXMKKyMgaXMgaW52b2tlIHRoZSBHTlUgcHJlcHJvY2Vzc29yIGluIHN0b2NrIEFOU0kvSVNPIEMgZmFzaGlvbi4KKyMKKyMgQXBwbGUncyBsaW5rZXIgaXMgc2ltaWxhciwgdGhhbmtzIHRvIHRoZSBuZXcgMiBzdGFnZSBsaW5raW5nCisjIG11bHRpcGxlIHN5bWJvbCBkZWZpbml0aW9ucyBhcmUgdHJlYXRlZCBhcyBlcnJvcnMsIGhlbmNlIHRoZQorIyAtbXVsdGlwbHlfZGVmaW5lZCBzdXBwcmVzcyBvcHRpb24gdG8gdHVybiBvZmYgdGhpcyBlcnJvci4KKyMKKwogaWZlcSAoJChIT1NUT1MpLGRhcndpbikKIEhPU1RDQwkJPSBjYworSE9TVENGTEFHUwkrPSAtdHJhZGl0aW9uYWwtY3BwCitIT1NUTERGTEFHUwkrPSAtbXVsdGlwbHlfZGVmaW5lZCBzdXBwcmVzcwogZWxzZQogSE9TVENDCQk9IGdjYwogZW5kaWYKLUhPU1RDRkxBR1MJPSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgotSE9TVFNUUklQCT0gc3RyaXAKKworaWZlcSAoJChIT1NUT1MpLGN5Z3dpbikKK0hPU1RDRkxBR1MJKz0gLWFuc2kKK2VuZGlmCisKKyMgV2UgYnVpbGQgc29tZSBmaWxlcyB3aXRoIGV4dHJhIHBlZGFudGljIGZsYWdzIHRvIHRyeSB0byBtaW5pbWl6ZSB0aGluZ3MKKyMgdGhhdCB3b24ndCBidWlsZCBvbiBzb21lIHdlaXJkIGhvc3QgY29tcGlsZXIgLS0gdGhvdWdoIHRoZXJlIGFyZSBsb3RzIG9mCisjIGV4Y2VwdGlvbnMgZm9yIGZpbGVzIHRoYXQgYXJlbid0IGNvbXBsYWludC4KKworSE9TVENGTEFHU19OT1BFRCA9ICQoZmlsdGVyLW91dCAtcGVkYW50aWMsJChIT1NUQ0ZMQUdTKSkKK0hPU1RDRkxBR1MJKz0gLXBlZGFudGljCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMKQEAgLTIwMCw3ICsyMjgsNyBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLWV4cG9ydAlIT1NUQ0MgSE9TVENGTEFHUyBDUk9TU19DT01QSUxFIFwKK2V4cG9ydAlIT1NUQ0MgSE9TVENGTEFHUyBIT1NUTERGTEFHUyBQRURDRkxBR1MgSE9TVFNUUklQIENST1NTX0NPTVBJTEUgXAogCUFTIExEIENDIENQUCBBUiBOTSBTVFJJUCBPQkpDT1BZIE9CSkRVTVAgTUFLRQogZXhwb3J0CVRFWFRfQkFTRSBQTEFURk9STV9DUFBGTEFHUyBQTEFURk9STV9SRUxGTEFHUyBDUFBGTEFHUyBDRkxBR1MgQUZMQUdTCiAKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTM2L214MzEvdGltZXIuYyBiL2NwdS9hcm0xMTM2L214MzEvdGltZXIuYwppbmRleCAyOWI0ODRlLi43OTcyYmEwIDEwMDY0NAotLS0gYS9jcHUvYXJtMTEzNi9teDMxL3RpbWVyLmMKKysrIGIvY3B1L2FybTExMzYvbXgzMS90aW1lci5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIH0KIAogLyogZGVsYXkgeCB1c2Vjb25kcyBBTkQgcGVyc2VydmUgYWR2YW5jZSB0aW1zdGFtcCB2YWx1ZSAqLwotdm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdG1wOwogCXVsb25nIHRtbzsKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTM2L29tYXAyNHh4L3RpbWVyLmMgYi9jcHUvYXJtMTEzNi9vbWFwMjR4eC90aW1lci5jCmluZGV4IDhkZDhkN2IuLjY3NTQ3NDkgMTAwNjQ0Ci0tLSBhL2NwdS9hcm0xMTM2L29tYXAyNHh4L3RpbWVyLmMKKysrIGIvY3B1L2FybTExMzYvb21hcDI0eHgvdGltZXIuYwpAQCAtNzQsNyArNzQsNyBAQAogfQogCiAvKiBkZWxheSB4IHVzZWNvbmRzIEFORCBwZXJzZXJ2ZSBhZHZhbmNlIHRpbXN0YW1wIHZhbHVlICovCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVsb25nIHRtbywgdG1wOwogCmRpZmYgLS1naXQgYS9jcHUvYXJtMTE3Ni9jcHUuYyBiL2NwdS9hcm0xMTc2L2NwdS5jCmluZGV4IGQxYTMzMjcuLjJjMDAxNGYgMTAwNjQ0Ci0tLSBhL2NwdS9hcm0xMTc2L2NwdS5jCisrKyBiL2NwdS9hcm0xMTc2L2NwdS5jCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxjb21tYW5kLmg+Ci0jaW5jbHVkZSA8czNjNjQwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzY0MDAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKIHN0YXRpYyB2b2lkIGNhY2hlX2ZsdXNoICh2b2lkKTsKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTc2L3MzYzY0eHgvY3B1X2luaXQuUyBiL2NwdS9hcm0xMTc2L3MzYzY0eHgvY3B1X2luaXQuUwppbmRleCAzMmJiNDY3Zi4uZGY4OGNiYSAxMDA2NDQKLS0tIGEvY3B1L2FybTExNzYvczNjNjR4eC9jcHVfaW5pdC5TCisrKyBiL2NwdS9hcm0xMTc2L3MzYzY0eHgvY3B1X2luaXQuUwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlIDxjb25maWcuaD4KLSNpbmNsdWRlIDxzM2M2NDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvczNjNjQwMC5oPgogCiAJLmdsb2JsIG1lbV9jdHJsX2FzbV9pbml0CiBtZW1fY3RybF9hc21faW5pdDoKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTc2L3MzYzY0eHgvcmVzZXQuUyBiL2NwdS9hcm0xMTc2L3MzYzY0eHgvcmVzZXQuUwppbmRleCAzMTViMTNmLi5lYWU1NzJlIDEwMDY0NAotLS0gYS9jcHUvYXJtMTE3Ni9zM2M2NHh4L3Jlc2V0LlMKKysrIGIvY3B1L2FybTExNzYvczNjNjR4eC9yZXNldC5TCkBAIC0yMSw3ICsyMSw3IEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpbmNsdWRlIDxzM2M2NDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvczNjNjQwMC5oPgogCiAuZ2xvYmwgcmVzZXRfY3B1CiByZXNldF9jcHU6CmRpZmYgLS1naXQgYS9jcHUvYXJtMTE3Ni9zM2M2NHh4L3NwZWVkLmMgYi9jcHUvYXJtMTE3Ni9zM2M2NHh4L3NwZWVkLmMKaW5kZXggNWMzMzVhNS4uMTE5NjJhYyAxMDA2NDQKLS0tIGEvY3B1L2FybTExNzYvczNjNjR4eC9zcGVlZC5jCisrKyBiL2NwdS9hcm0xMTc2L3MzYzY0eHgvc3BlZWQuYwpAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxzM2M2NDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvczNjNjQwMC5oPgogCiAjZGVmaW5lIEFQTEwgMAogI2RlZmluZSBNUExMIDEKZGlmZiAtLWdpdCBhL2NwdS9hcm0xMTc2L3MzYzY0eHgvdGltZXIuYyBiL2NwdS9hcm0xMTc2L3MzYzY0eHgvdGltZXIuYwppbmRleCAyMmE1Yjc3Li45NzY4MzE5IDEwMDY0NAotLS0gYS9jcHUvYXJtMTE3Ni9zM2M2NHh4L3RpbWVyLmMKKysrIGIvY3B1L2FybTExNzYvczNjNjR4eC90aW1lci5jCkBAIC00MCw3ICs0MCw3IEBACiAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vcHJvYy1hcm12L3B0cmFjZS5oPgotI2luY2x1ZGUgPHMzYzY0MDAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zM2M2NDAwLmg+CiAjaW5jbHVkZSA8ZGl2NjQuaD4KIAogc3RhdGljIHVsb25nIHRpbWVyX2xvYWRfdmFsOwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJdGltZXN0YW1wID0gdCAqICh0aW1lcl9sb2FkX3ZhbCAvICgxMDAgKiBDT05GSUdfU1lTX0haKSk7CiB9CiAKLXZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAJdWxvbmcgdG1vOwpkaWZmIC0tZ2l0IGEvY3B1L2FybTExNzYvc3RhcnQuUyBiL2NwdS9hcm0xMTc2L3N0YXJ0LlMKaW5kZXggY2I4OTFkZi4uNjhhMzU2ZCAxMDA2NDQKLS0tIGEvY3B1L2FybTExNzYvc3RhcnQuUworKysgYi9jcHUvYXJtMTE3Ni9zdGFydC5TCkBAIC0zNSw3ICszNSw3IEBACiAjaWZkZWYgQ09ORklHX0VOQUJMRV9NTVUKICNpbmNsdWRlIDxhc20vcHJvYy9kb21haW4uaD4KICNlbmRpZgotI2luY2x1ZGUgPHMzYzY0MDAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zM2M2NDAwLmg+CiAKICNpZiAhZGVmaW5lZChDT05GSUdfRU5BQkxFX01NVSkgJiYgIWRlZmluZWQoQ09ORklHX1NZU19QSFlfVUJPT1RfQkFTRSkKICNkZWZpbmUgQ09ORklHX1NZU19QSFlfVUJPT1RfQkFTRQlDT05GSUdfU1lTX1VCT09UX0JBU0UKQEAgLTI0MSwxNiArMjQxLDExIEBACiBza2lwX2h3X2luaXQ6CiAJLyogU2V0IHVwIHRoZSBzdGFjawkJCQkJCSAgICAqLwogc3RhY2tfc2V0dXA6Ci0jaWZkZWYgQ09ORklHX01FTU9SWV9VUFBFUl9DT0RFCi0JbGRyCXNwLCA9KENPTkZJR19TWVNfVUJPT1RfQkFTRSArIENPTkZJR19TWVNfVUJPT1RfU0laRSAtIDB4YykKLSNlbHNlCi0JbGRyCXIwLCBfVEVYVF9CQVNFCQkvKiB1cHBlciAxMjggS2lCOiByZWxvY2F0ZWQgdWJvb3QgICAqLworCWxkcglyMCwgPUNPTkZJR19TWVNfVUJPT1RfQkFTRQkvKiBiYXNlIG9mIGNvcHkgaW4gRFJBTQkgICAgKi8KIAlzdWIJcjAsIHIwLCAjQ09ORklHX1NZU19NQUxMT0NfTEVOCS8qIG1hbGxvYyBhcmVhICAgICAgICAgICAgICAgICAgICAgICovCiAJc3ViCXIwLCByMCwgI0NPTkZJR19TWVNfR0JMX0RBVEFfU0laRSAvKiBiZGluZm8gICAgICAgICAgICAgICAgICAgICAgICAqLwogCXN1YglzcCwgcjAsICMxMgkJLyogbGVhdmUgMyB3b3JkcyBmb3IgYWJvcnQtc3RhY2sgICAgKi8KIAotI2VuZGlmCi0KIGNsZWFyX2JzczoKIAlsZHIJcjAsIF9ic3Nfc3RhcnQJCS8qIGZpbmQgc3RhcnQgb2YgYnNzIHNlZ21lbnQgICAgICAgICovCiAJbGRyCXIxLCBfYnNzX2VuZAkJLyogc3RvcCBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2NwdS9hcm03MjB0L2ludGVycnVwdHMuYyBiL2NwdS9hcm03MjB0L2ludGVycnVwdHMuYwppbmRleCA5MWQ1NTJjLi5lYjhkNDI1IDEwMDY0NAotLS0gYS9jcHUvYXJtNzIwdC9pbnRlcnJ1cHRzLmMKKysrIGIvY3B1L2FybTcyMHQvaW50ZXJydXB0cy5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAl0aW1lc3RhbXAgPSB0OwogfQogCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVsb25nIHRtbzsKIApAQCAtMjk2LDcgKzI5Niw3IEBACiAJcmV0dXJuIHRpbWVzdGFtcCAtIGJhc2U7CiB9CiAKLXZvaWQgdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCiB7CiAJdTMyIHRpY2tzOwogCmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9hMzIwL01ha2VmaWxlIGIvY3B1L2FybTkyMHQvYTMyMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDMwYzUzCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L2FybTkyMHQvYTMyMC9NYWtlZmlsZQpAQCAtMCwwICsxLDQ3IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKFNPQykuYQorCitTT0JKUwkrPSByZXNldC5vCitDT0JKUwkrPSB0aW1lci5vCitDT0JKUwkrPSBmdHNtYzAyMC5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQorCithbGw6CSQob2JqKS5kZXBlbmQgJChMSUIpCisKKyQoTElCKToJJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgZGVmaW5lcyAkKG9iaikuZGVwZW5kIHRhcmdldAoraW5jbHVkZSAkKFNSQ1RSRUUpL3J1bGVzLm1rCisKK3NpbmNsdWRlICQob2JqKS5kZXBlbmQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvYTMyMC9mdHNtYzAyMC5jIGIvY3B1L2FybTkyMHQvYTMyMC9mdHNtYzAyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NDY1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtOTIwdC9hMzIwL2Z0c21jMDIwLmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOSBGYXJhZGF5IFRlY2hub2xvZ3kKKyAqIFBvLVl1IENodWFuZyA8cmF0YmVydEBmYXJhZGF5LXRlY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9mdHNtYzAyMC5oPgorCitzdHJ1Y3QgZnRzbWMwMjBfY29uZmlnIHsKKwl1bnNpZ25lZCBpbnQJY29uZmlnOworCXVuc2lnbmVkIGludAl0aW1pbmc7Cit9OworCitzdGF0aWMgc3RydWN0IGZ0c21jMDIwX2NvbmZpZyBjb25maWdbXSA9IENPTkZJR19TWVNfRlRTTUMwMjBfQ09ORklHUzsKKworc3RhdGljIHN0cnVjdCBmdHNtYzAyMCAqc21jID0gKHN0cnVjdCBmdHNtYzAyMCAqKUNPTkZJR19GVFNNQzAyMF9CQVNFOworCitzdGF0aWMgdm9pZCBmdHNtYzAyMF9zZXR1cF9iYW5rKHVuc2lnbmVkIGludCBiYW5rLCBzdHJ1Y3QgZnRzbWMwMjBfY29uZmlnICpjZmcpCit7CisJaWYgKGJhbmsgPiAzKSB7CisJCXByaW50ZigiYmFuayAjICV1IGludmFsaWRcbiIsIGJhbmspOworCQlyZXR1cm47CisJfQorCisJd3JpdGVsKGNmZy0+Y29uZmlnLCAmc21jLT5iYW5rW2JhbmtdLmNyKTsKKwl3cml0ZWwoY2ZnLT50aW1pbmcsICZzbWMtPmJhbmtbYmFua10udHByKTsKK30KKwordm9pZCBmdHNtYzAyMF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb25maWcpOyBpKyspCisJCWZ0c21jMDIwX3NldHVwX2JhbmsoaSwgJmNvbmZpZ1tpXSk7Cit9CmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9hMzIwL3Jlc2V0LlMgYi9jcHUvYXJtOTIwdC9hMzIwL3Jlc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjYTUyNwotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9hcm05MjB0L2EzMjAvcmVzZXQuUwpAQCAtMCwwICsxLDIyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5IEZhcmFkYXkgVGVjaG5vbG9neQorICogUG8tWXUgQ2h1YW5nIDxyYXRiZXJ0QGZhcmFkYXktdGVjaC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLmdsb2JhbCByZXNldF9jcHUKK3Jlc2V0X2NwdToKKwliCXJlc2V0X2NwdQpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvYTMyMC90aW1lci5jIGIvY3B1L2FybTkyMHQvYTMyMC90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNjU1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvYXJtOTIwdC9hMzIwL3RpbWVyLmMKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgRmFyYWRheSBUZWNobm9sb2d5CisgKiBQby1ZdSBDaHVhbmcgPHJhdGJlcnRAZmFyYWRheS10ZWNoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZnRwbXUwMTAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9mdHRtcjAxMC5oPgorCitzdGF0aWMgdWxvbmcgdGltZXN0YW1wOworc3RhdGljIHVsb25nIGxhc3RkZWM7CisKK3N0YXRpYyBzdHJ1Y3QgZnR0bXIwMTAgKnRtciA9IChzdHJ1Y3QgZnR0bXIwMTAgKilDT05GSUdfRlRUTVIwMTBfQkFTRTsKK3N0YXRpYyBzdHJ1Y3QgZnRwbXUwMTAgKnBtdSA9IChzdHJ1Y3QgZnRwbXUwMTAgKilDT05GSUdfRlRQTVUwMTBfQkFTRTsKKworI2RlZmluZSBUSU1FUl9DTE9DSwkzMjc2OAorI2RlZmluZSBUSU1FUl9MT0FEX1ZBTAkweGZmZmZmZmZmCisKK2ludCB0aW1lcl9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IG9zY2M7CisJdW5zaWduZWQgaW50IGNyOworCisJZGVidWcoIiVzKClcbiIsIF9fZnVuY19fKTsKKworCS8qIGRpc2FibGUgdGltZXJzICovCisJd3JpdGVsKDAsICZ0bXItPmNyKTsKKworCS8qCisJICogdXNlIDMyNzY4SHogb3NjaWxsYXRvciBmb3IgUlRDLCBXRFQsIFRJTUVSCisJICovCisKKwkvKiBlbmFibGUgdGhlIDMyNzY4SHogb3NjaWxsYXRvciAqLworCW9zY2MgPSByZWFkbCgmcG11LT5PU0NDKTsKKwlvc2NjICY9IH4oRlRQTVUwMTBfT1NDQ19PU0NMX09GRiB8IEZUUE1VMDEwX09TQ0NfT1NDTF9UUkkpOworCXdyaXRlbChvc2NjLCAmcG11LT5PU0NDKTsKKworCS8qIHdhaXQgdW50aWwgcmVhZHkgKi8KKwl3aGlsZSAoIShyZWFkbCgmcG11LT5PU0NDKSAmIEZUUE1VMDEwX09TQ0NfT1NDTF9TVEFCTEUpKQorCQk7CisKKwkvKiBzZWxlY3QgMzI3NjhIeiBvc2NpbGxhdG9yICovCisJb3NjYyA9IHJlYWRsKCZwbXUtPk9TQ0MpOworCW9zY2MgfD0gRlRQTVUwMTBfT1NDQ19PU0NMX1JUQ0xTRUw7CisJd3JpdGVsKG9zY2MsICZwbXUtPk9TQ0MpOworCisJLyogc2V0dXAgdGltZXIgKi8KKwl3cml0ZWwoVElNRVJfTE9BRF9WQUwsICZ0bXItPnRpbWVyM19sb2FkKTsKKwl3cml0ZWwoVElNRVJfTE9BRF9WQUwsICZ0bXItPnRpbWVyM19jb3VudGVyKTsKKwl3cml0ZWwoMCwgJnRtci0+dGltZXIzX21hdGNoMSk7CisJd3JpdGVsKDAsICZ0bXItPnRpbWVyM19tYXRjaDIpOworCisJLyogd2UgZG9uJ3Qgd2FudCB0aW1lciB0byBpc3N1ZSBpbnRlcnJ1cHRzICovCisJd3JpdGVsKEZUVE1SMDEwX1RNM19NQVRDSDEgfAorCSAgICAgICBGVFRNUjAxMF9UTTNfTUFUQ0gyIHwKKwkgICAgICAgRlRUTVIwMTBfVE0zX09WRVJGTE9XLAorCSAgICAgICAmdG1yLT5pbnRlcnJ1cHRfbWFzayk7CisKKwljciA9IHJlYWRsKCZ0bXItPmNyKTsKKwljciB8PSBGVFRNUjAxMF9UTTNfQ0xPQ0s7CS8qIHVzZSBleHRlcm5hbCBjbG9jayAqLworCWNyIHw9IEZUVE1SMDEwX1RNM19FTkFCTEU7CisJd3JpdGVsKGNyLCAmdG1yLT5jcik7CisKKwkvKiBpbml0IHRoZSB0aW1lc3RhbXAgYW5kIGxhc3RkZWMgdmFsdWUgKi8KKwlyZXNldF90aW1lcl9tYXNrZWQoKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdGltZXIgd2l0aG91dCBpbnRlcnJ1cHRzCisgKi8KKworLyoKKyAqIHJlc2V0IHRpbWUKKyAqLwordm9pZCByZXNldF90aW1lcl9tYXNrZWQodm9pZCkKK3sKKwkvKiBjYXB1cmUgY3VycmVudCBkZWNyZW1lbnRlciB2YWx1ZSB0aW1lICovCisJbGFzdGRlYyA9IHJlYWRsKCZ0bXItPnRpbWVyM19jb3VudGVyKSAvIChUSU1FUl9DTE9DSyAvIENPTkZJR19TWVNfSFopOworCXRpbWVzdGFtcCA9IDA7CQkvKiBzdGFydCAiYWR2YW5jaW5nIiB0aW1lIHN0YW1wIGZyb20gMCAqLworCisJZGVidWcoIiVzKCk6IGxhc3RkZWMgPSAlbHhcbiIsIF9fZnVuY19fLCBsYXN0ZGVjKTsKK30KKwordm9pZCByZXNldF90aW1lcih2b2lkKQoreworCWRlYnVnKCIlcygpXG4iLCBfX2Z1bmNfXyk7CisJcmVzZXRfdGltZXJfbWFza2VkKCk7Cit9CisKKy8qCisgKiByZXR1cm4gdGltZXIgdGlja3MKKyAqLwordWxvbmcgZ2V0X3RpbWVyX21hc2tlZCh2b2lkKQoreworCS8qIGN1cnJlbnQgdGljayB2YWx1ZSAqLworCXVsb25nIG5vdyA9IHJlYWRsKCZ0bXItPnRpbWVyM19jb3VudGVyKSAvIChUSU1FUl9DTE9DSyAvIENPTkZJR19TWVNfSFopOworCisJZGVidWcoIiVzKCk6IG5vdyA9ICVseCwgbGFzdGRlYyA9ICVseFxuIiwgX19mdW5jX18sIG5vdywgbGFzdGRlYyk7CisKKwlpZiAobGFzdGRlYyA+PSBub3cpIHsKKwkJLyoKKwkJICogbm9ybWFsIG1vZGUgKG5vbiByb2xsKQorCQkgKiBtb3ZlIHN0YW1wIGZvcmR3YXJkIHdpdGggYWJzb3VsdGUgZGlmZiB0aWNrcworCQkgKi8KKwkJdGltZXN0YW1wICs9IGxhc3RkZWMgLSBub3c7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogd2UgaGF2ZSBvdmVyZmxvdyBvZiB0aGUgY291bnQgZG93biB0aW1lcgorCQkgKgorCQkgKiBudHMgPSB0cyArIGxkICsgKFRMViAtIG5vdykKKwkJICogdHM9b2xkIHN0YW1wLCBsZD10aW1lIHRoYXQgcGFzc2VkIGJlZm9yZSBwYXNzaW5nIHRocm91Z2ggLTEKKwkJICogKFRMVi1ub3cpIGFtb3VudCBvZiB0aW1lIGFmdGVyIHBhc3NpbmcgdGhvdWdoIC0xCisJCSAqIG50cyA9IG5ldyAiYWR2YW5jaW5nIHRpbWUgc3RhbXAiLi4uaXQgY291bGQgYWxzbyByb2xsIGFuZAorCQkgKiBjYXVzZSBwcm9ibGVtcy4KKwkJICovCisJCXRpbWVzdGFtcCArPSBsYXN0ZGVjICsgVElNRVJfTE9BRF9WQUwgLSBub3c7CisJfQorCisJbGFzdGRlYyA9IG5vdzsKKworCWRlYnVnKCIlcygpIHJldHVybnMgJWx4XG4iLCBfX2Z1bmNfXywgdGltZXN0YW1wKTsKKworCXJldHVybiB0aW1lc3RhbXA7Cit9CisKKy8qCisgKiByZXR1cm4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRpbWVyIHRpY2tzIGFuZCBiYXNlCisgKi8KK3Vsb25nIGdldF90aW1lcih1bG9uZyBiYXNlKQoreworCWRlYnVnKCIlcyglbHgpXG4iLCBfX2Z1bmNfXywgYmFzZSk7CisJcmV0dXJuIGdldF90aW1lcl9tYXNrZWQoKSAtIGJhc2U7Cit9CisKK3ZvaWQgc2V0X3RpbWVyKHVsb25nIHQpCit7CisJZGVidWcoIiVzKCVseClcbiIsIF9fZnVuY19fLCB0KTsKKwl0aW1lc3RhbXAgPSB0OworfQorCisvKiBkZWxheSB4IHVzZWNvbmRzIEFORCBwZXJzZXJ2ZSBhZHZhbmNlIHRpbXN0YW1wIHZhbHVlICovCit2b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisJbG9uZyB0bW8gPSB1c2VjICogKFRJTUVSX0NMT0NLIC8gMTAwMCkgLyAxMDAwOworCXVuc2lnbmVkIGxvbmcgbm93LCBsYXN0ID0gcmVhZGwoJnRtci0+dGltZXIzX2NvdW50ZXIpOworCisJZGVidWcoIiVzKCVsdSlcbiIsIF9fZnVuY19fLCB1c2VjKTsKKwl3aGlsZSAodG1vID4gMCkgeworCQlub3cgPSByZWFkbCgmdG1yLT50aW1lcjNfY291bnRlcik7CisJCWlmIChub3cgPiBsYXN0KSAvKiBjb3VudCBkb3duIHRpbWVyIG92ZXJmbG93ICovCisJCQl0bW8gLT0gVElNRVJfTE9BRF9WQUwgKyBsYXN0IC0gbm93OworCQllbHNlCisJCQl0bW8gLT0gbGFzdCAtIG5vdzsKKwkJbGFzdCA9IG5vdzsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHJlYWQgdGltZWJhc2UgYXMgbG9uZyBsb25nKS4KKyAqIE9uIEFSTSBpdCBqdXN0IHJldHVybnMgdGhlIHRpbWVyIHZhbHVlLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X3RpY2tzKHZvaWQpCit7CisJZGVidWcoIiVzKClcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gZ2V0X3RpbWVyKDApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBkZXJpdmVkIGZyb20gUG93ZXJQQyBjb2RlICh0aW1lYmFzZSBjbG9jayBmcmVxdWVuY3kpLgorICogT24gQVJNIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lciB0aWNrcyBwZXIgc2Vjb25kLgorICovCit1bG9uZyBnZXRfdGJjbGsodm9pZCkKK3sKKwlkZWJ1ZygiJXMoKVxuIiwgX19mdW5jX18pOworCXJldHVybiBDT05GSUdfU1lTX0haOworfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC90aW1lci5jIGIvY3B1L2FybTkyMHQvYXQ5MXJtOTIwMC90aW1lci5jCmluZGV4IDIzNWQxMDcuLjljNTRiYmUgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjB0L2F0OTFybTkyMDAvdGltZXIuYworKysgYi9jcHUvYXJtOTIwdC9hdDkxcm05MjAwL3RpbWVyLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAl0aW1lc3RhbXAgPSB0OwogfQogCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVkZWxheV9tYXNrZWQodXNlYyk7CiB9CmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9pbXgvdGltZXIuYyBiL2NwdS9hcm05MjB0L2lteC90aW1lci5jCmluZGV4IDMxZWM1ODguLmIwNmI1MTggMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjB0L2lteC90aW1lci5jCisrKyBiL2NwdS9hcm05MjB0L2lteC90aW1lci5jCkBAIC04OSw3ICs4OSw3IEBACiAJfSB3aGlsZSAoZGlmZiA+PSAwKTsKIH0KIAotdm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl1ZGVsYXlfbWFza2VkKHVzZWMpOwogfQpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQva3M4Njk1L3RpbWVyLmMgYi9jcHUvYXJtOTIwdC9rczg2OTUvdGltZXIuYwppbmRleCAyMjk4N2JjLi44ODZlMzcwIDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9rczg2OTUvdGltZXIuYworKysgYi9jcHUvYXJtOTIwdC9rczg2OTUvdGltZXIuYwpAQCAtODEsNyArODEsNyBAQAogCXRpbWVyX3RpY2tzID0gdDsKIH0KIAotdm9pZCB1ZGVsYXkodWxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkodWxvbmcgdXNlYykKIHsKIAl1bG9uZyBzdGFydCA9IGdldF90aW1lcl9tYXNrZWQoKTsKIAl1bG9uZyBlbmQ7CmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9zM2MyNHgwL2ludGVycnVwdHMuYyBiL2NwdS9hcm05MjB0L3MzYzI0eDAvaW50ZXJydXB0cy5jCmluZGV4IDkxNDg5NDYuLjg3OWZkYTYgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjB0L3MzYzI0eDAvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9hcm05MjB0L3MzYzI0eDAvaW50ZXJydXB0cy5jCkBAIC0zMSwxMSArMzEsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDAwKQotI2luY2x1ZGUgPHMzYzI0MDAuaD4KLSNlbGlmIGRlZmluZWQoQ09ORklHX1MzQzI0MTApCi0jaW5jbHVkZSA8czNjMjQxMC5oPgotI2VuZGlmCisjaW5jbHVkZSA8YXNtL2FyY2gvczNjMjR4MF9jcHUuaD4KICNpbmNsdWRlIDxhc20vcHJvYy1hcm12L3B0cmFjZS5oPgogCiB2b2lkIGRvX2lycSAoc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCmRpZmYgLS1naXQgYS9jcHUvYXJtOTIwdC9zM2MyNHgwL3NwZWVkLmMgYi9jcHUvYXJtOTIwdC9zM2MyNHgwL3NwZWVkLmMKaW5kZXggMTM2Yzc3OS4uYjEzMjgzYSAxMDA2NDQKLS0tIGEvY3B1L2FybTkyMHQvczNjMjR4MC9zcGVlZC5jCisrKyBiL2NwdS9hcm05MjB0L3MzYzI0eDAvc3BlZWQuYwpAQCAtMzAsMTUgKzMwLDEwIEBACiAgKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgotI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApIHx8IGRlZmluZWQgKENPTkZJR19TM0MyNDEwKSB8fCBkZWZpbmVkIChDT05GSUdfVFJBQikKKyNpZmRlZiBDT05GSUdfUzNDMjRYMAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDAwKQotI2luY2x1ZGUgPHMzYzI0MDAuaD4KLSNlbGlmIGRlZmluZWQoQ09ORklHX1MzQzI0MTApCi0jaW5jbHVkZSA8czNjMjQxMC5oPgotI2VuZGlmCisjaW5jbHVkZSA8YXNtL2FyY2gvczNjMjR4MF9jcHUuaD4KIAogI2RlZmluZSBNUExMIDAKICNkZWZpbmUgVVBMTCAxCkBAIC0xMDAsNiArOTUsNCBAQAogCXJldHVybiBnZXRfUExMQ0xLKFVQTEwpOwogfQogCi0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUzNDMjQwMCkgfHwKLQkgIGRlZmluZWQgKENPTkZJR19TM0MyNDEwKSB8fAotCSAgZGVmaW5lZCAoQ09ORklHX1RSQUIpICovCisjZW5kaWYgLyogQ09ORklHX1MzQzI0WDAgKi8KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L3MzYzI0eDAvdGltZXIuYyBiL2NwdS9hcm05MjB0L3MzYzI0eDAvdGltZXIuYwppbmRleCBhMjdmMGUyLi43ZDQ3MzU0IDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9zM2MyNHgwL3RpbWVyLmMKKysrIGIvY3B1L2FybTkyMHQvczNjMjR4MC90aW1lci5jCkBAIC0zMCwxNyArMzAsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX1MzQzI0MTApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19UUkFCKQorI2lmZGVmIENPTkZJR19TM0MyNFgwCiAKICNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApCi0jaW5jbHVkZSA8czNjMjQwMC5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKLSNpbmNsdWRlIDxzM2MyNDEwLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vYXJjaC9zM2MyNHgwX2NwdS5oPgogCiBpbnQgdGltZXJfbG9hZF92YWwgPSAwOwogc3RhdGljIHVsb25nIHRpbWVyX2NsazsKQEAgLTEwNiw3ICs5OSw3IEBACiAJdGltZXN0YW1wID0gdDsKIH0KIAotdm9pZCB1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVsb25nIHRtbzsKIAl1bG9uZyBzdGFydCA9IGdldF90aWNrcygpOwpAQCAtMjI3LDYgKzIyMCw0IEBACiAJLypOT1RSRUFDSEVEKi8KIH0KIAotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1MzQzI0MDApICB8fAotCSAgZGVmaW5lZCAoQ09ORklHX1MzQzI0MTApIHx8Ci0JICBkZWZpbmVkIChDT05GSUdfVFJBQikgKi8KKyNlbmRpZiAvKiBDT05GSUdfUzNDMjRYMCAqLwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyMHQvczNjMjR4MC91c2IuYyBiL2NwdS9hcm05MjB0L3MzYzI0eDAvdXNiLmMKaW5kZXggYjViYThjNC4uZTQ2OGVkMCAxMDA2NDQKLS0tIGEvY3B1L2FybTkyMHQvczNjMjR4MC91c2IuYworKysgYi9jcHUvYXJtOTIwdC9zM2MyNHgwL3VzYi5jCkBAIC0yMywxNSArMjMsMTEgQEAKIAogI2luY2x1ZGUgPGNvbW1vbi5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfTkVXKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfVVNCX09IQ0lfQ1BVX0lOSVQpCi0jIGlmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApIHx8IGRlZmluZWQoQ09ORklHX1MzQzI0MTApCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfTkVXKSAmJiBcCisgICAgZGVmaW5lZChDT05GSUdfU1lTX1VTQl9PSENJX0NQVV9JTklUKSAmJiBcCisgICAgZGVmaW5lZChDT05GSUdfUzNDMjRYMCkKIAotI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApCi0jIGluY2x1ZGUgPHMzYzI0MDAuaD4KLSNlbGlmIGRlZmluZWQoQ09ORklHX1MzQzI0MTApCi0jIGluY2x1ZGUgPHMzYzI0MTAuaD4KLSNlbmRpZgotCisjaW5jbHVkZSA8YXNtL2FyY2gvczNjMjR4MF9jcHUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogaW50IHVzYl9jcHVfaW5pdCh2b2lkKQpAQCAtNzAsNSArNjYsNiBAQAogCXJldHVybiAwOwogfQogCi0jIGVuZGlmCS8qIGRlZmluZWQoQ09ORklHX1MzQzI0MDApIHx8IGRlZmluZWQoQ09ORklHX1MzQzI0MTApICovCi0jZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfTkVXKSAmJiBkZWZpbmVkKENPTkZJR19TWVNfVVNCX09IQ0lfQ1BVX0lOSVQpICovCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfTkVXKSAmJiBcCisJICAgZGVmaW5lZChDT05GSUdfU1lTX1VTQl9PSENJX0NQVV9JTklUKSAmJiBcCisJICAgZGVmaW5lZChDT05GSUdfUzNDMjRYMCkgKi8KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L3MzYzI0eDAvdXNiX29oY2kuYyBiL2NwdS9hcm05MjB0L3MzYzI0eDAvdXNiX29oY2kuYwppbmRleCA3NjcyZTRjLi41YWE4ZDY0IDEwMDY0NAotLS0gYS9jcHUvYXJtOTIwdC9zM2MyNHgwL3VzYl9vaGNpLmMKKysrIGIvY3B1L2FybTkyMHQvczNjMjR4MC91c2Jfb2hjaS5jCkBAIC0zNiwxNCArMzYsOSBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogLyogI2luY2x1ZGUgPHBjaS5oPiBubyBQQ0kgb24gdGhlIFMzQzI0WDAgKi8KIAotI2lmZGVmIENPTkZJR19VU0JfT0hDSQorI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJKSAmJiBkZWZpbmVkKENPTkZJR19TM0MyNFgwKQogCi0jaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkKLSNpbmNsdWRlIDxzM2MyNDAwLmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQotI2luY2x1ZGUgPHMzYzI0MTAuaD4KLSNlbmRpZgotCisjaW5jbHVkZSA8YXNtL2FyY2gvczNjMjR4MF9jcHUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KICNpbmNsdWRlIDx1c2IuaD4KQEAgLTE3NTcsNCArMTc1Miw0IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfVVNCX09IQ0kgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSSkgJiYgZGVmaW5lZChDT05GSUdfUzNDMjRYMCkgKi8KZGlmZiAtLWdpdCBhL2NwdS9hcm05MjB0L3N0YXJ0LlMgYi9jcHUvYXJtOTIwdC9zdGFydC5TCmluZGV4IDExNDQyN2EuLjc3OWYxOTIgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjB0L3N0YXJ0LlMKKysrIGIvY3B1L2FybTkyMHQvc3RhcnQuUwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJYm5lCWNvcHlleAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDAwKSB8fCBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQorI2lmZGVmIENPTkZJR19TM0MyNFgwCiAJLyogdHVybiBvZmYgdGhlIHdhdGNoZG9nICovCiAKICMgaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkKQEAgLTE2Niw3ICsxNjYsNyBAQAogCWxkcglyMCwgPUNMS0RJVk4KIAltb3YJcjEsICMzCiAJc3RyCXIxLCBbcjBdCi0jZW5kaWYJLyogQ09ORklHX1MzQzI0MDAgfHwgQ09ORklHX1MzQzI0MTAgKi8KKyNlbmRpZgkvKiBDT05GSUdfUzNDMjRYMCAqLwogCiAJLyoKIAkgKiB3ZSBkbyBzeXMtY3JpdGljYWwgaW5pdHMgb25seSBhdCByZWJvb3QsCmRpZmYgLS1naXQgYS9jcHUvYXJtOTI1dC90aW1lci5jIGIvY3B1L2FybTkyNXQvdGltZXIuYwppbmRleCBjMTZlZjI1Li43ZGZlMmI1IDEwMDY0NAotLS0gYS9jcHUvYXJtOTI1dC90aW1lci5jCisrKyBiL2NwdS9hcm05MjV0L3RpbWVyLmMKQEAgLTgxLDcgKzgxLDcgQEAKIH0KIAogLyogZGVsYXkgeCB1c2Vjb25kcyBBTkQgcHJlc2VydmUgYWR2YW5jZSB0aW1lc3RhbXAgdmFsdWUgKi8KLXZvaWQgdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCiB7CiAJaW50MzJfdCB0bW8gPSB1c2VjICogKFRJTUVSX0NMT0NLIC8gMTAwMCkgLyAxMDAwOwogCXVpbnQzMl90IG5vdywgbGFzdCA9IF9fcmF3X3JlYWRsKENPTkZJR19TWVNfVElNRVJCQVNFICsgUkVBRF9USU0pOwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9hdDkxL3RpbWVyLmMgYi9jcHUvYXJtOTI2ZWpzL2F0OTEvdGltZXIuYwppbmRleCA4MTFiYjNjLi43MzUyYjVjIDEwMDY0NAotLS0gYS9jcHUvYXJtOTI2ZWpzL2F0OTEvdGltZXIuYworKysgYi9jcHUvYXJtOTI2ZWpzL2F0OTEvdGltZXIuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJcmV0dXJuIHRpY2tfdG9fdGltZShnZXRfdGlja3MoKSk7CiB9CiAKLXZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAJdWxvbmcgdG1vOwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9kYXZpbmNpL2NwdS5jIGIvY3B1L2FybTkyNmVqcy9kYXZpbmNpL2NwdS5jCmluZGV4IDM5MGNhYjguLmZjMzU1MWMgMTAwNjQ0Ci0tLSBhL2NwdS9hcm05MjZlanMvZGF2aW5jaS9jcHUuYworKysgYi9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvY3B1LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxuZXRkZXYuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotCisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIG9mZnNldHMgZnJvbSBQTEwgY29udHJvbGxlciBiYXNlICovCiAjZGVmaW5lIFBMTENfUExMQ1RMCTB4MTAwCkBAIC02MCw2ICs2MCw1NCBAQAogI2RlZmluZSBERFJfUExMRElWCVBMTENfUExMRElWMQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU09DX0RBOFhYCitjb25zdCBkdl9yZWcgKiBjb25zdCBzeXNkaXZbN10gPSB7CisJJmRhdmluY2lfcGxsY19yZWdzLT5wbGxkaXYxLCAmZGF2aW5jaV9wbGxjX3JlZ3MtPnBsbGRpdjIsCisJJmRhdmluY2lfcGxsY19yZWdzLT5wbGxkaXYzLCAmZGF2aW5jaV9wbGxjX3JlZ3MtPnBsbGRpdjQsCisJJmRhdmluY2lfcGxsY19yZWdzLT5wbGxkaXY1LCAmZGF2aW5jaV9wbGxjX3JlZ3MtPnBsbGRpdjYsCisJJmRhdmluY2lfcGxsY19yZWdzLT5wbGxkaXY3Cit9OworCitpbnQgY2xrX2dldChlbnVtIGRhdmluY2lfY2xrX2lkcyBpZCkKK3sKKwlpbnQgcHJlX2RpdjsKKwlpbnQgcGxsbTsKKwlpbnQgcG9zdF9kaXY7CisJaW50IHBsbF9vdXQ7CisKKwlwbGxfb3V0ID0gQ09ORklHX1NZU19PU0NJTl9GUkVROworCisJaWYgKGlkID09IERBVklOQ0lfQVVYQ0xLX0NMS0lEKQorCQlnb3RvIG91dDsKKworCS8qCisJICogTGV0cyBrZWVwIHRoaXMgc2ltcGxlLiBDb21iaW5pbmcgb3BlcmF0aW9ucyBjYW4gcmVzdWx0IGluCisJICogdW5leHBlY3RlZCBhcHByb3hpbWF0aW9ucworCSAqLworCXByZV9kaXYgPSAocmVhZGwoJmRhdmluY2lfcGxsY19yZWdzLT5wcmVkaXYpICYKKwkJICAgREFWSU5DSV9QTExDX0RJVl9NQVNLKSArIDE7CisJcGxsbSA9IHJlYWRsKCZkYXZpbmNpX3BsbGNfcmVncy0+cGxsbSkgKyAxOworCisJcGxsX291dCAvPSBwcmVfZGl2OworCXBsbF9vdXQgKj0gcGxsbTsKKworCWlmIChpZCA9PSBEQVZJTkNJX1BMTE1fQ0xLSUQpCisJCWdvdG8gb3V0OworCisJcG9zdF9kaXYgPSAocmVhZGwoJmRhdmluY2lfcGxsY19yZWdzLT5wb3N0ZGl2KSAmCisJCSAgICBEQVZJTkNJX1BMTENfRElWX01BU0spICsgMTsKKworCXBsbF9vdXQgLz0gcG9zdF9kaXY7CisKKwlpZiAoaWQgPT0gREFWSU5DSV9QTExDX0NMS0lEKQorCQlnb3RvIG91dDsKKworCXBsbF9vdXQgLz0gKHJlYWRsKHN5c2RpdltpZCAtIDFdKSAmIERBVklOQ0lfUExMQ19ESVZfTUFTSykgKyAxOworCitvdXQ6CisJcmV0dXJuIHBsbF9vdXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX1NPQ19EQThYWCAqLwogCiAjaWZkZWYgQ09ORklHX0RJU1BMQVlfQ1BVSU5GTwogCmRpZmYgLS1naXQgYS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvcHNjLmMgYi9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvcHNjLmMKaW5kZXggNWJiOTcyZi4uODI3M2E3ZiAxMDA2NDQKLS0tIGEvY3B1L2FybTkyNmVqcy9kYXZpbmNpL3BzYy5jCisrKyBiL2NwdS9hcm05MjZlanMvZGF2aW5jaS9wc2MuYwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyoKICAqIFRoZSBQU0MgbWFuYWdlcyB0aHJlZSBpbnB1dHMgdG8gYSAibW9kdWxlIiB3aGljaCBtYXkgYmUgYSBwZXJpcGhlcmFsIG9yCkBAIC00NywyMSArNDgsNDUgQEAKIC8qIFdvcmtzIG9uIEFsd2F5cyBPbiBwb3dlciBkb21haW4gb25seSAobm8gUEQgYXJndW1lbnQpICovCiB2b2lkIGxwc2Nfb24odW5zaWduZWQgaW50IGlkKQogewotCWR2X3JlZ19wIG1kc3RhdCwgbWRjdGw7CisJZHZfcmVnX3AgbWRzdGF0LCBtZGN0bCwgcHRzdGF0LCBwdGNtZDsKKyNpZmRlZiBDT05GSUdfU09DX0RBOFhYCisJc3RydWN0IGRhdmluY2lfcHNjX3JlZ3MgKnBzY19yZWdzOworI2VuZGlmCiAKKyNpZm5kZWYgQ09ORklHX1NPQ19EQThYWAogCWlmIChpZCA+PSBEQVZJTkNJX0xQU0NfR0VNKQogCQlyZXR1cm47CQkJLyogRG9uJ3Qgd29yayBvbiBEU1AgUG93ZXIgRG9tYWluICovCiAKIAltZHN0YXQgPSBSRUdfUChQU0NfTURTVEFUX0JBU0UgKyAoaWQgKiA0KSk7CiAJbWRjdGwgPSBSRUdfUChQU0NfTURDVExfQkFTRSArIChpZCAqIDQpKTsKKwlwdHN0YXQgPSBSRUdfUChQU0NfUFRTVEFUKTsKKwlwdGNtZCA9IFJFR19QKFBTQ19QVENNRCk7CisjZWxzZQorCWlmIChpZCA8IERBVklOQ0lfTFBTQ19QU0MxX0JBU0UpIHsKKwkJaWYgKGlkID49IFBTQ19QU0MwX01PRFVMRV9JRF9DTlQpCisJCQlyZXR1cm47CisJCXBzY19yZWdzID0gZGF2aW5jaV9wc2MwX3JlZ3M7CisJCW1kc3RhdCA9ICZwc2NfcmVncy0+cHNjMC5tZHN0YXRbaWRdOworCQltZGN0bCA9ICZwc2NfcmVncy0+cHNjMC5tZGN0bFtpZF07CisJfSBlbHNlIHsKKwkJaWQgLT0gREFWSU5DSV9MUFNDX1BTQzFfQkFTRTsKKwkJaWYgKGlkID49IFBTQ19QU0MxX01PRFVMRV9JRF9DTlQpCisJCQlyZXR1cm47CisJCXBzY19yZWdzID0gZGF2aW5jaV9wc2MxX3JlZ3M7CisJCW1kc3RhdCA9ICZwc2NfcmVncy0+cHNjMS5tZHN0YXRbaWRdOworCQltZGN0bCA9ICZwc2NfcmVncy0+cHNjMS5tZGN0bFtpZF07CisJfQorCXB0c3RhdCA9ICZwc2NfcmVncy0+cHRzdGF0OworCXB0Y21kID0gJnBzY19yZWdzLT5wdGNtZDsKKyNlbmRpZgogCi0Jd2hpbGUgKFJFRyhQU0NfUFRTVEFUKSAmIDB4MDEpCisJd2hpbGUgKHJlYWRsKHB0c3RhdCkgJiAweDAxKQogCQljb250aW51ZTsKIAotCWlmICgoKm1kc3RhdCAmIDB4MWYpID09IDB4MDMpCi0JCXJldHVybjsJCQkvKiBBbHJlYWR5IG9uIGFuZCBlbmFibGVkICovCisJaWYgKChyZWFkbChtZHN0YXQpICYgMHgxZikgPT0gMHgwMykKKwkJcmV0dXJuOyAvKiBBbHJlYWR5IG9uIGFuZCBlbmFibGVkICovCiAKLQkqbWRjdGwgfD0gMHgwMzsKKwl3cml0ZWwocmVhZGwobWRjdGwpIHwgMHgwMywgbWRjdGwpOwogCiAJc3dpdGNoIChpZCkgewogI2lmZGVmIENPTkZJR19TT0NfRE02NDRYCkBAIC04MCwxNiArMTA1LDE2IEBACiAJY2FzZSBEQVZJTkNJX0xQU0NfTUVNU1RJQ0s6CiAJY2FzZSBEQVZJTkNJX0xQU0NfTWNCU1A6CiAJY2FzZSBEQVZJTkNJX0xQU0NfR1BJTzoKLQkJKm1kY3RsIHw9IDB4MjAwOworCQl3cml0ZWwocmVhZGwobWRjdGwpIHwgMHgyMDAsIG1kY3RsKTsKIAkJYnJlYWs7CiAjZW5kaWYKIAl9CiAKLQlSRUcoUFNDX1BUQ01EKSA9IDB4MDE7CisJd3JpdGVsKDB4MDEsIHB0Y21kKTsKIAotCXdoaWxlIChSRUcoUFNDX1BUU1RBVCkgJiAweDAzKQorCXdoaWxlIChyZWFkbChwdHN0YXQpICYgMHgwMSkKIAkJY29udGludWU7Ci0Jd2hpbGUgKCgqbWRzdGF0ICYgMHgxZikgIT0gMHgwMykJLyogUHJvYmFibHkgYW4gb3ZlcmtpbGwuLi4gKi8KKwl3aGlsZSAoKHJlYWRsKG1kc3RhdCkgJiAweDFmKSAhPSAweDAzKQogCQljb250aW51ZTsKIH0KIApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9kYXZpbmNpL3RpbWVyLmMgYi9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvdGltZXIuYwppbmRleCA4MDc1MWFkLi45ZGE3NDQzIDEwMDY0NAotLS0gYS9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvdGltZXIuYworKysgYi9jcHUvYXJtOTI2ZWpzL2RhdmluY2kvdGltZXIuYwpAQCAtMzgsOCArMzgsOSBAQAogICovCiAKICNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KIAotdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3Qgeworc3RydWN0IGRhdmluY2lfdGltZXIgewogCXVfaW50MzJfdAlwaWQxMjsKIAl1X2ludDMyX3QJZW11bWd0OwogCXVfaW50MzJfdAluYTE7CkBAIC01MSw5ICs1MiwxMCBAQAogCXVfaW50MzJfdAl0Y3I7CiAJdV9pbnQzMl90CXRnY3I7CiAJdV9pbnQzMl90CXdkdGNyOwotfSBkYXZpbmNpX3RpbWVyOworfTsKIAotZGF2aW5jaV90aW1lcgkJKnRpbWVyID0gKGRhdmluY2lfdGltZXIgKilDT05GSUdfU1lTX1RJTUVSQkFTRTsKK3N0YXRpYyBzdHJ1Y3QgZGF2aW5jaV90aW1lciAqIGNvbnN0IHRpbWVyID0KKwkoc3RydWN0IGRhdmluY2lfdGltZXIgKilDT05GSUdfU1lTX1RJTUVSQkFTRTsKIAogI2RlZmluZSBUSU1FUl9MT0FEX1ZBTAkoQ09ORklHX1NZU19IWl9DTE9DSyAvIENPTkZJR19TWVNfSFopCiAjZGVmaW5lIFRJTV9DTEtfRElWCTE2CkBAIC02NCwzMCArNjYsMzAgQEAKIGludCB0aW1lcl9pbml0KHZvaWQpCiB7CiAJLyogV2UgYXJlIHVzaW5nIHRpbWVyMzQgaW4gdW5jaGFpbmVkIDMyLWJpdCBtb2RlLCBmdWxsIHNwZWVkICovCi0JdGltZXItPnRjciA9IDB4MDsKLQl0aW1lci0+dGdjciA9IDB4MDsKLQl0aW1lci0+dGdjciA9IDB4MDYgfCAoKFRJTV9DTEtfRElWIC0gMSkgPDwgOCk7Ci0JdGltZXItPnRpbTM0ID0gMHgwOwotCXRpbWVyLT5wcmQzNCA9IFRJTUVSX0xPQURfVkFMOworCXdyaXRlbCgweDAsICZ0aW1lci0+dGNyKTsKKwl3cml0ZWwoMHgwLCAmdGltZXItPnRnY3IpOworCXdyaXRlbCgweDA2IHwgKChUSU1fQ0xLX0RJViAtIDEpIDw8IDgpLCAmdGltZXItPnRnY3IpOworCXdyaXRlbCgweDAsICZ0aW1lci0+dGltMzQpOworCXdyaXRlbChUSU1FUl9MT0FEX1ZBTCwgJnRpbWVyLT5wcmQzNCk7CiAJbGFzdGluYyA9IDA7CiAJdGltZXN0YW1wID0gMDsKLQl0aW1lci0+dGNyID0gMiA8PCAyMjsKKwl3cml0ZWwoMiA8PCAyMiwgJnRpbWVyLT50Y3IpOwogCiAJcmV0dXJuKDApOwogfQogCiB2b2lkIHJlc2V0X3RpbWVyKHZvaWQpCiB7Ci0JdGltZXItPnRjciA9IDB4MDsKLQl0aW1lci0+dGltMzQgPSAwOworCXdyaXRlbCgweDAsICZ0aW1lci0+dGNyKTsKKwl3cml0ZWwoMHgwLCAmdGltZXItPnRpbTM0KTsKIAlsYXN0aW5jID0gMDsKIAl0aW1lc3RhbXAgPSAwOwotCXRpbWVyLT50Y3IgPSAyIDw8IDIyOworCXdyaXRlbCgyIDw8IDIyLCAmdGltZXItPnRjcik7CiB9CiAKIHN0YXRpYyB1bG9uZyBnZXRfdGltZXJfcmF3KHZvaWQpCiB7Ci0JdWxvbmcgbm93ID0gdGltZXItPnRpbTM0OworCXVsb25nIG5vdyA9IHJlYWRsKCZ0aW1lci0+dGltMzQpOwogCiAJaWYgKG5vdyA+PSBsYXN0aW5jKSB7CiAJCS8qIG5vcm1hbCBtb2RlICovCkBAIC0xMTAsNyArMTEyLDcgQEAKIAl0aW1lc3RhbXAgPSB0OwogfQogCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl1bG9uZyB0bW87CiAJdWxvbmcgZW5kdGltZTsKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjZlanMva2lya3dvb2QvdGltZXIuYyBiL2NwdS9hcm05MjZlanMva2lya3dvb2QvdGltZXIuYwppbmRleCA4MTdmZjQyLi4yZWM2YTkzIDEwMDY0NAotLS0gYS9jcHUvYXJtOTI2ZWpzL2tpcmt3b29kL3RpbWVyLmMKKysrIGIvY3B1L2FybTkyNmVqcy9raXJrd29vZC90aW1lci5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAl0aW1lc3RhbXAgPSB0OwogfQogCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl1aW50IGN1cnJlbnQ7CiAJdWxvbmcgZGVsYXl0aWNrczsKZGlmZiAtLWdpdCBhL2NwdS9hcm05MjZlanMvbXgyNy90aW1lci5jIGIvY3B1L2FybTkyNmVqcy9teDI3L3RpbWVyLmMKaW5kZXggOTAxMTA1OC4uOGYxZDQ3YiAxMDA2NDQKLS0tIGEvY3B1L2FybTkyNmVqcy9teDI3L3RpbWVyLmMKKysrIGIvY3B1L2FybTkyNmVqcy9teDI3L3RpbWVyLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogfQogCiAvKiBkZWxheSB4IHVzZWNvbmRzIEFORCBwcmVzZXJ2ZSBhZHZhbmNlIHRpbXN0YW1wIHZhbHVlICovCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CiAJdWxvbmcgdG1vOwpkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9ub21hZGlrL3RpbWVyLmMgYi9jcHUvYXJtOTI2ZWpzL25vbWFkaWsvdGltZXIuYwppbmRleCAxNjA2N2M5Li4wNDdiOWUzIDEwMDY0NAotLS0gYS9jcHUvYXJtOTI2ZWpzL25vbWFkaWsvdGltZXIuYworKysgYi9jcHUvYXJtOTI2ZWpzL25vbWFkaWsvdGltZXIuYwpAQCAtNTksNyArNTksNyBAQAogfQogCiAvKiBEZWxheSB4IHVzZWNvbmRzICovCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl1bG9uZyBpbmksIGVuZDsKIApkaWZmIC0tZ2l0IGEvY3B1L2FybTkyNmVqcy9vbWFwL3RpbWVyLmMgYi9jcHUvYXJtOTI2ZWpzL29tYXAvdGltZXIuYwppbmRleCAzOTJiMTU4Li4yYWMzOGM0IDEwMDY0NAotLS0gYS9jcHUvYXJtOTI2ZWpzL29tYXAvdGltZXIuYworKysgYi9jcHUvYXJtOTI2ZWpzL29tYXAvdGltZXIuYwpAQCAtODAsNyArODAsNyBAQAogfQogCiAvKiBkZWxheSB4IHVzZWNvbmRzIEFORCBwZXJzZXJ2ZSBhZHZhbmNlIHRpbXN0YW1wIHZhbHVlICovCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVsb25nIHRtbywgdG1wOwogCmRpZmYgLS1naXQgYS9jcHUvYXJtOTI2ZWpzL3ZlcnNhdGlsZS90aW1lci5jIGIvY3B1L2FybTkyNmVqcy92ZXJzYXRpbGUvdGltZXIuYwppbmRleCA1MGMxMzM1Li41NjNkYjM2IDEwMDc1NQotLS0gYS9jcHUvYXJtOTI2ZWpzL3ZlcnNhdGlsZS90aW1lci5jCisrKyBiL2NwdS9hcm05MjZlanMvdmVyc2F0aWxlL3RpbWVyLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogfQogCiAvKiBkZWxheSB4IHVzZWNvbmRzIEFORCBwZXJzZXJ2ZSBhZHZhbmNlIHRpbXN0YW1wIHZhbHVlICovCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVsb25nIHRtbywgdG1wOwogCmRpZmYgLS1naXQgYS9jcHUvYXJtX2NvcnRleGE4L29tYXAzL21lbS5jIGIvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9tZW0uYwppbmRleCA4YjhjZDZkLi5kZmI3ZTRjIDEwMDY0NAotLS0gYS9jcHUvYXJtX2NvcnRleGE4L29tYXAzL21lbS5jCisrKyBiL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvbWVtLmMKQEAgLTE2MSwxMCArMTYxLDExIEBACiAJCXdyaXRlbCgwLCAmc2RyY19iYXNlLT5zeXNjb25maWcpOwogCiAJCS8qIHNldHVwIHNkcmMgdG8gYmFsbCBtdXggKi8KLQkJd3JpdGVsKFNEUF9TRFJDX1NIQVJJTkcsICZzZHJjX2Jhc2UtPnNoYXJpbmcpOworCQl3cml0ZWwoU0RSQ19TSEFSSU5HLCAmc2RyY19iYXNlLT5zaGFyaW5nKTsKIAogCQkvKiBEaXNhYmxlIFBvd2VyIERvd24gb2YgQ0tFIGN1eiBvZiAxIENLRSBvbiBjb21ibyBwYXJ0ICovCi0JCXdyaXRlbChTUkZST05SRVNFVCB8IFBBR0VQT0xJQ1lfSElHSCwgJnNkcmNfYmFzZS0+cG93ZXIpOworCQl3cml0ZWwoV0FLRVVQUFJPQyB8IFBXRE5FTiB8IFNSRlJPTlJFU0VUIHwgUEFHRVBPTElDWV9ISUdILAorCQkJCSZzZHJjX2Jhc2UtPnBvd2VyKTsKIAogCQl3cml0ZWwoRU5BRExMIHwgRExMUEhBU0VfOTAsICZzZHJjX2Jhc2UtPmRsbGFfY3RybCk7CiAJCXNkZWxheSgweDIwMDAwKTsKZGlmZiAtLWdpdCBhL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvc3lzX2luZm8uYyBiL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvc3lzX2luZm8uYwppbmRleCAzMWIyMDAzLi4wOGZiMzJlYSAxMDA2NDQKLS0tIGEvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy9zeXNfaW5mby5jCisrKyBiL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvc3lzX2luZm8uYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHUzMiBpc19tZW1fc2RyKHZvaWQpCiB7Ci0JaWYgKHJlYWRsKCZzZHJjX2Jhc2UtPmNzW0NTMF0ubXIpID09IFNEUF9TRFJDX01SXzBfU0RSKQorCWlmIChyZWFkbCgmc2RyY19iYXNlLT5jc1tDUzBdLm1yKSA9PSBTRFJDX01SXzBfU0RSKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvdGltZXIuYyBiL2NwdS9hcm1fY29ydGV4YTgvb21hcDMvdGltZXIuYwppbmRleCAxMmExNmIzLi40MDFiZmU2IDEwMDY0NAotLS0gYS9jcHUvYXJtX2NvcnRleGE4L29tYXAzL3RpbWVyLmMKKysrIGIvY3B1L2FybV9jb3J0ZXhhOC9vbWFwMy90aW1lci5jCkBAIC04Miw3ICs4Miw3IEBACiB9CiAKIC8qIGRlbGF5IHggdXNlY29uZHMgKi8KLXZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQogewogCWxvbmcgdG1vID0gdXNlYyAqIChUSU1FUl9DTE9DSyAvIDEwMDApIC8gMTAwMDsKIAl1bnNpZ25lZCBsb25nIG5vdywgbGFzdCA9IHJlYWRsKCZ0aW1lcl9iYXNlLT50Y3JyKTsKZGlmZiAtLWdpdCBhL2NwdS9hcm1fY29ydGV4YTgvczVwYzF4eC90aW1lci5jIGIvY3B1L2FybV9jb3J0ZXhhOC9zNXBjMXh4L3RpbWVyLmMKaW5kZXggY2RiYTVkOS4uYzVkZjVjNSAxMDA2NDQKLS0tIGEvY3B1L2FybV9jb3J0ZXhhOC9zNXBjMXh4L3RpbWVyLmMKKysrIGIvY3B1L2FybV9jb3J0ZXhhOC9zNXBjMXh4L3RpbWVyLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogfQogCiAvKiBkZWxheSB4IHVzZWNvbmRzICovCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl1bnNpZ25lZCBsb25nIHRtbywgdG1wOwogCmRpZmYgLS1naXQgYS9jcHUvYXQzMmFwL01ha2VmaWxlIGIvY3B1L2F0MzJhcC9NYWtlZmlsZQppbmRleCBlMDhmMjczLi42MDg5OWM3IDEwMDY0NAotLS0gYS9jcHUvYXQzMmFwL01ha2VmaWxlCisrKyBiL2NwdS9hdDMyYXAvTWFrZWZpbGUKQEAgLTMwLDcgKzMwLDcgQEAKIFNUQVJULXkJCQkrPSBzdGFydC5vCiAKIENPQkpTLXkJCQkrPSBjcHUubwotQ09CSlMteQkJCSs9IGhzZHJhbWMubworQ09CSlMtJChDT05GSUdfU1lTX0hTRFJBTUMpICs9IGhzZHJhbWMubwogQ09CSlMteQkJCSs9IGV4Y2VwdGlvbi5vCiBDT0JKUy15CQkJKz0gY2FjaGUubwogQ09CSlMteQkJCSs9IGludGVycnVwdHMubwpkaWZmIC0tZ2l0IGEvY3B1L2F0MzJhcC9oc2RyYW1jLmMgYi9jcHUvYXQzMmFwL2hzZHJhbWMuYwppbmRleCBmNzQxMjFjLi5iNmVhZTY2IDEwMDY0NAotLS0gYS9jcHUvYXQzMmFwL2hzZHJhbWMuYworKysgYi9jcHUvYXQzMmFwL2hzZHJhbWMuYwpAQCAtMjEsNyArMjEsNiBAQAogICovCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpZmRlZiBDT05GSUdfU1lTX0hTRFJBTUMKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2RyYW0uaD4KIApAQCAtMTE2LDUgKzExNSwzIEBACiAKIAlyZXR1cm4gc2RyYW1fc2l6ZTsKIH0KLQotI2VuZGlmIC8qIENPTkZJR19TWVNfSFNEUkFNQyAqLwpkaWZmIC0tZ2l0IGEvY3B1L2F0MzJhcC9pbnRlcnJ1cHRzLmMgYi9jcHUvYXQzMmFwL2ludGVycnVwdHMuYwppbmRleCA3NWNjMzllLi5jNmQ4ZDE2IDEwMDY0NAotLS0gYS9jcHUvYXQzMmFwL2ludGVycnVwdHMuYworKysgYi9jcHUvYXQzMmFwL2ludGVycnVwdHMuYwpAQCAtOTYsNyArOTYsNyBAQAogLyoKICAqIEZvciBzaG9ydCBkZWxheXMgb25seS4gSXQgd2lsbCBvdmVyZmxvdyBhZnRlciBhIGZldyBzZWNvbmRzLgogICovCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl1bnNpZ25lZCBsb25nIGN5Y2xlczsKIAl1bnNpZ25lZCBsb25nIGJhc2U7CmRpZmYgLS1naXQgYS9jcHUvYmxhY2tmaW4vaW50ZXJydXB0cy5jIGIvY3B1L2JsYWNrZmluL2ludGVycnVwdHMuYwppbmRleCAxOTQ1NmU1Li45MjFiZmUwIDEwMDY0NAotLS0gYS9jcHUvYmxhY2tmaW4vaW50ZXJydXB0cy5jCisrKyBiL2NwdS9ibGFja2Zpbi9pbnRlcnJ1cHRzLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCB1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCiB7CiAJdW5zaWduZWQgbG9uZyBkZWxheSwgc3RhcnQsIHN0b3A7CiAJdW5zaWduZWQgbG9uZyBjY2xrOwpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvTWFrZWZpbGUgYi9jcHUvaTM4Ni9NYWtlZmlsZQppbmRleCBlOThiZDNkLi5jNjU4YzZlIDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9NYWtlZmlsZQorKysgYi9jcHUvaTM4Ni9NYWtlZmlsZQpAQCAtMjksNyArMjksNyBAQAogTElCCT0gJChvYmopbGliJChDUFUpLmEKIAogU1RBUlQJPSBzdGFydC5vIHN0YXJ0MTYubyByZXNldHZlYy5vCi1DT0JKUwk9IHNlcmlhbC5vIGludGVycnVwdHMubyBleGNlcHRpb25zLm8gY3B1Lm8KK0NPQkpTCT0gc2VyaWFsLm8gaW50ZXJydXB0cy5vIGNwdS5vCiAKIFNSQ1MJOj0gJChTVEFSVDoubz0uUykgJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKIE9CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpICQoQ09CSlMpKQpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvY3B1LmMgYi9jcHUvaTM4Ni9jcHUuYwppbmRleCBkOTFlMzNiLi4zMDEwNTE5IDEwMDY0NAotLS0gYS9jcHUvaTM4Ni9jcHUuYworKysgYi9jcHUvaTM4Ni9jcHUuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGNvbW1hbmQuaD4KICNpbmNsdWRlIDxhc20vaW50ZXJydXB0Lmg+CiAKLWludCBjcHVfaW5pdCh2b2lkKQoraW50IGNwdV9pbml0X2Yodm9pZCkKIHsKIAkvKiBpbml0aWFsaXplIEZQVSwgcmVzZXQgRU0sIHNldCBNUCBhbmQgTkUgKi8KIAlhc20gKCJmbmluaXRcbiIgXApAQCAtNDYsMTAgKzQ2LDEzIEBACiAJICAgICAib3JsICAkMHgyMiwgJWVheFxuIiBcCiAJICAgICAibW92bCAlZWF4LCAlY3IwXG4iICk7CiAKKwlyZXR1cm4gMDsKK30KKworaW50IGNwdV9pbml0X3Iodm9pZCkKK3sKIAkvKiBJbml0aWFsaXplIGNvcmUgaW50ZXJydXB0IGFuZCBleGNlcHRpb24gZnVuY3Rpb25hbGl0eSBvZiBDUFUgKi8KIAljcHVfaW5pdF9pbnRlcnJ1cHRzICgpOwotCWNwdV9pbml0X2V4Y2VwdGlvbnMgKCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQsNiArNzcsOCBAQAogCiAvKiBzZWdtZW50IDB4NzAgaXMgYW4gYXJiaXRyYXJ5IHNlZ21lbnQgd2hpY2ggZG9lcyBub3QgZXhpc3QgKi8KIGFzbSgiLmdsb2JsIGdlbmVyYXRlX2dwZlxuIgorICAgICIuaGlkZGVuIGdlbmVyYXRlX2dwZlxuIgorICAgICIudHlwZSBnZW5lcmF0ZV9ncGYsIEBmdW5jdGlvblxuIgogICAgICJnZW5lcmF0ZV9ncGY6XG4iCiAgICAgImxqbXAgICAkMHg3MCwgJDB4NDcxMTQ3MTFcbiIpOwogCmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9leGNlcHRpb25zLmMgYi9jcHUvaTM4Ni9leGNlcHRpb25zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjM2Q0MzQuLjAwMDAwMDAKLS0tIGEvY3B1L2kzODYvZXhjZXB0aW9ucy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDIKLSAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZS4KLSAqCi0gKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwotICogcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICogTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2ludGVycnVwdC5oPgotCi1hc20gKCIuZ2xvYmwgZXhwX3JldHVyblxuIgotICAgICAiZXhwX3JldHVybjpcbiIKLSAgICAgIiAgICAgYWRkbCAgJDEyLCAlZXNwXG4iCi0gICAgICIgICAgIHBvcCAgICVlc3BcbiIKLSAgICAgIiAgICAgcG9wYVxuIgotICAgICAiICAgICBpcmV0XG4iKTsKLQotY2hhciBleGNlcHRpb25fc3RhY2tbNDA5Nl07Ci0KLS8qCi0gKiBGb3IgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgZWFjaCBleGNlcHRpb24sIHJlZmVyIHRvOgotICogSW50ZWyuIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbAotICogVm9sdW1lIDE6IEJhc2ljIEFyY2hpdGVjdHVyZQotICogT3JkZXIgTnVtYmVyOiAyNTM2NjUtMDI5VVMsIE5vdmVtYmVyIDIwMDgKLSAqIFRhYmxlIDYtMS4gRXhjZXB0aW9ucyBhbmQgSW50ZXJydXB0cwotICovCi1ERUNMQVJFX0VYQ0VQVElPTigwLCBkaXZpZGVfZXJyb3JfZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMSwgZGVidWdfZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMiwgbm1pX2ludGVycnVwdF9lbnRyeSk7Ci1ERUNMQVJFX0VYQ0VQVElPTigzLCBicmVha3BvaW50X2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDQsIG92ZXJmbG93X2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDUsIGJvdW5kX3JhbmdlX2V4Y2VlZGVkX2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDYsIGludmFsaWRfb3Bjb2RlX2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDcsIGRldmljZV9ub3RfYXZhaWxhYmxlX2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDgsIGRvdWJsZV9mYXVsdF9lbnRyeSk7Ci1ERUNMQVJFX0VYQ0VQVElPTig5LCBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW5fZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMTAsIGludmFsaWRfdHNzX2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDExLCBzZWdtZW50X25vdF9wcmVzZW50X2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDEyLCBzdGFja19zZWdtZW50X2ZhdWx0X2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDEzLCBnZW5lcmFsX3Byb3RlY3Rpb25fZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMTQsIHBhZ2VfZmF1bHRfZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMTUsIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeSk7Ci1ERUNMQVJFX0VYQ0VQVElPTigxNiwgZmxvYXRpbmdfcG9pbnRfZXJyb3JfZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMTcsIGFsaWdubWVudF9jaGVja19lbnRyeSk7Ci1ERUNMQVJFX0VYQ0VQVElPTigxOCwgbWFjaGluZV9jaGVja19lbnRyeSk7Ci1ERUNMQVJFX0VYQ0VQVElPTigxOSwgc2ltZF9mbG9hdGluZ19wb2ludF9leGNlcHRpb25fZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMjAsIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeSk7Ci1ERUNMQVJFX0VYQ0VQVElPTigyMSwgcmVzZXJ2ZWRfZXhjZXB0aW9uX2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDIyLCByZXNlcnZlZF9leGNlcHRpb25fZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMjMsIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeSk7Ci1ERUNMQVJFX0VYQ0VQVElPTigyNCwgcmVzZXJ2ZWRfZXhjZXB0aW9uX2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDI1LCByZXNlcnZlZF9leGNlcHRpb25fZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMjYsIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeSk7Ci1ERUNMQVJFX0VYQ0VQVElPTigyNywgcmVzZXJ2ZWRfZXhjZXB0aW9uX2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDI4LCByZXNlcnZlZF9leGNlcHRpb25fZW50cnkpOwotREVDTEFSRV9FWENFUFRJT04oMjksIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeSk7Ci1ERUNMQVJFX0VYQ0VQVElPTigzMCwgcmVzZXJ2ZWRfZXhjZXB0aW9uX2VudHJ5KTsKLURFQ0xBUkVfRVhDRVBUSU9OKDMxLCByZXNlcnZlZF9leGNlcHRpb25fZW50cnkpOwotCi1fX2lzcl9fIHJlc2VydmVkX2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKLXsKLQlwcmludGYoIlJlc2VydmVkIEV4Y2VwdGlvbiAlZCBhdCAlMDR4OiUwOHhcbiIsIGNhdXNlLCBzZWcsIGlwKTsKLX0KLQotX19pc3JfXyBkaXZpZGVfZXJyb3JfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJEaXZpZGUgRXJyb3IgKERpdmlzaW9uIGJ5IHplcm8pIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Ci0Jd2hpbGUoMSk7Ci19Ci0KLV9faXNyX18gZGVidWdfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJEZWJ1ZyBJbnRlcnJ1cHQgKFNpbmdsZSBzdGVwKSBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwotfQotCi1fX2lzcl9fIG5taV9pbnRlcnJ1cHRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJOTUkgSW50ZXJydXB0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Ci19Ci0KLV9faXNyX18gYnJlYWtwb2ludF9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKLXsKLQlwcmludGYoIkJyZWFrcG9pbnQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKLX0KLQotX19pc3JfXyBvdmVyZmxvd19lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKLXsKLQlwcmludGYoIk92ZXJmbG93IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Ci0Jd2hpbGUoMSk7Ci19Ci0KLV9faXNyX18gYm91bmRfcmFuZ2VfZXhjZWVkZWRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJCT1VORCBSYW5nZSBFeGNlZWRlZCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwotCXdoaWxlKDEpOwotfQotCi1fX2lzcl9fIGludmFsaWRfb3Bjb2RlX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQotewotCXByaW50ZigiSW52YWxpZCBPcGNvZGUgKFVuRGVmaW5lZCBPcGNvZGUpIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Ci0Jd2hpbGUoMSk7Ci19Ci0KLV9faXNyX18gZGV2aWNlX25vdF9hdmFpbGFibGVfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJEZXZpY2UgTm90IEF2YWlsYWJsZSAoTm8gTWF0aCBDb3Byb2Nlc3NvcikgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKLQl3aGlsZSgxKTsKLX0KLQotX19pc3JfXyBkb3VibGVfZmF1bHRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJEb3VibGUgZmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKLQl3aGlsZSgxKTsKLX0KLQotX19pc3JfXyBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW5fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJDby1wcm9jZXNzb3Igc2VnbWVudCBvdmVycnVuIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Ci0Jd2hpbGUoMSk7Ci19Ci0KLV9faXNyX18gaW52YWxpZF90c3NfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJJbnZhbGlkIFRTUyBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwotfQotCi1fX2lzcl9fIHNlZ21lbnRfbm90X3ByZXNlbnRfZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJTZWdtZW50IE5vdCBQcmVzZW50IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Ci0Jd2hpbGUoMSk7Ci19Ci0KLV9faXNyX18gc3RhY2tfc2VnbWVudF9mYXVsdF9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKLXsKLQlwcmludGYoIlN0YWNrIFNlZ21lbnQgRmF1bHQgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKLQl3aGlsZSgxKTsKLX0KLQotX19pc3JfXyBnZW5lcmFsX3Byb3RlY3Rpb25fZW50cnkoaW50IGNhdXNlLCBpbnQgaXAsIGludCBzZWcpCi17Ci0JcHJpbnRmKCJHZW5lcmFsIFByb3RlY3Rpb24gYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKLX0KLQotX19pc3JfXyBwYWdlX2ZhdWx0X2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQotewotCXByaW50ZigiUGFnZSBmYXVsdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOwotCXdoaWxlKDEpOwotfQotCi1fX2lzcl9fIGZsb2F0aW5nX3BvaW50X2Vycm9yX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQotewotCXByaW50ZigiRmxvYXRpbmctUG9pbnQgRXJyb3IgKE1hdGggRmF1bHQpIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Ci19Ci0KLV9faXNyX18gYWxpZ25tZW50X2NoZWNrX2VudHJ5KGludCBjYXVzZSwgaW50IGlwLCBpbnQgc2VnKQotewotCXByaW50ZigiQWxpZ25tZW50IGNoZWNrIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Ci19Ci0KLV9faXNyX18gbWFjaGluZV9jaGVja19lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKLXsKLQlwcmludGYoIk1hY2hpbmUgQ2hlY2sgYXQgJTA0eDolMDh4XG4iLCBzZWcsIGlwKTsKLX0KLQotX19pc3JfXyBzaW1kX2Zsb2F0aW5nX3BvaW50X2V4Y2VwdGlvbl9lbnRyeShpbnQgY2F1c2UsIGludCBpcCwgaW50IHNlZykKLXsKLQlwcmludGYoIlNJTUQgRmxvYXRpbmctUG9pbnQgRXhjZXB0aW9uIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7Ci19Ci0KLWludCBjcHVfaW5pdF9leGNlcHRpb25zKHZvaWQpCi17Ci0JLyogSnVzdCBpbiBjYXNlLi4uICovCi0JZGlzYWJsZV9pbnRlcnJ1cHRzKCk7Ci0KLQkvKiBTZXR1cCBleGNlcHRpb25zICovCi0Jc2V0X3ZlY3RvcigweDAwLCBleHBfMCk7Ci0Jc2V0X3ZlY3RvcigweDAxLCBleHBfMSk7Ci0Jc2V0X3ZlY3RvcigweDAyLCBleHBfMik7Ci0Jc2V0X3ZlY3RvcigweDAzLCBleHBfMyk7Ci0Jc2V0X3ZlY3RvcigweDA0LCBleHBfNCk7Ci0Jc2V0X3ZlY3RvcigweDA1LCBleHBfNSk7Ci0Jc2V0X3ZlY3RvcigweDA2LCBleHBfNik7Ci0Jc2V0X3ZlY3RvcigweDA3LCBleHBfNyk7Ci0Jc2V0X3ZlY3RvcigweDA4LCBleHBfOCk7Ci0Jc2V0X3ZlY3RvcigweDA5LCBleHBfOSk7Ci0Jc2V0X3ZlY3RvcigweDBhLCBleHBfMTApOwotCXNldF92ZWN0b3IoMHgwYiwgZXhwXzExKTsKLQlzZXRfdmVjdG9yKDB4MGMsIGV4cF8xMik7Ci0Jc2V0X3ZlY3RvcigweDBkLCBleHBfMTMpOwotCXNldF92ZWN0b3IoMHgwZSwgZXhwXzE0KTsKLQlzZXRfdmVjdG9yKDB4MGYsIGV4cF8xNSk7Ci0Jc2V0X3ZlY3RvcigweDEwLCBleHBfMTYpOwotCXNldF92ZWN0b3IoMHgxMSwgZXhwXzE3KTsKLQlzZXRfdmVjdG9yKDB4MTIsIGV4cF8xOCk7Ci0Jc2V0X3ZlY3RvcigweDEzLCBleHBfMTkpOwotCXNldF92ZWN0b3IoMHgxNCwgZXhwXzIwKTsKLQlzZXRfdmVjdG9yKDB4MTUsIGV4cF8yMSk7Ci0Jc2V0X3ZlY3RvcigweDE2LCBleHBfMjIpOwotCXNldF92ZWN0b3IoMHgxNywgZXhwXzIzKTsKLQlzZXRfdmVjdG9yKDB4MTgsIGV4cF8yNCk7Ci0Jc2V0X3ZlY3RvcigweDE5LCBleHBfMjUpOwotCXNldF92ZWN0b3IoMHgxYSwgZXhwXzI2KTsKLQlzZXRfdmVjdG9yKDB4MWIsIGV4cF8yNyk7Ci0Jc2V0X3ZlY3RvcigweDFjLCBleHBfMjgpOwotCXNldF92ZWN0b3IoMHgxZCwgZXhwXzI5KTsKLQlzZXRfdmVjdG9yKDB4MWUsIGV4cF8zMCk7Ci0Jc2V0X3ZlY3RvcigweDFmLCBleHBfMzEpOwotCi0JLyogSXQgaXMgbm93IHNhZmUgdG8gZW5hYmxlIGludGVycnVwdHMgKi8KLQllbmFibGVfaW50ZXJydXB0cygpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9jcHUvaTM4Ni9pbnRlcnJ1cHRzLmMgYi9jcHUvaTM4Ni9pbnRlcnJ1cHRzLmMKaW5kZXggMDYzZWE0Mi4uNGI1NzQzNyAxMDA2NDQKLS0tIGEvY3B1L2kzODYvaW50ZXJydXB0cy5jCisrKyBiL2NwdS9pMzg2L2ludGVycnVwdHMuYwpAQCAtMSw0ICsxLDcgQEAKIC8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDgKKyAqIEdyYWVtZSBSdXNzLCBncmFlbWUucnVzc0BnbWFpbC5jb20uCisgKgogICogKEMpIENvcHlyaWdodCAyMDAyCiAgKiBEYW5pZWwgRW5nc3Ry9m0sIE9taWNyb24gQ2V0aSBBQiwgZGFuaWVsQG9taWNyb24uc2UuCiAgKgpAQCAtMjQsNiArMjcsMTYgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxhc20vaW50ZXJydXB0Lmg+CiAKKyNkZWZpbmUgREVDTEFSRV9JTlRFUlJVUFQoeCkgXAorCSIuZ2xvYmwgaXJxXyIjeCJcbiIgXAorCSIuaGlkZGVuIGlycV8iI3giXG4iIFwKKwkiLnR5cGUgaXJxXyIjeCIsIEBmdW5jdGlvblxuIiBcCisJImlycV8iI3giOlxuIiBcCisJInB1c2hsICVlYnBcbiIgXAorCSJtb3ZsICVlc3AsJWVicFxuIiBcCisJInB1c2hhXG4iIFwKKwkicHVzaGwgJCIjeCJcbiIgXAorCSJqbXAgaXJxX2NvbW1vbl9lbnRyeVxuIgogCiBzdHJ1Y3QgaWR0X2VudHJ5IHsKIAl1MTYJYmFzZV9sb3c7CkBAIC0zMywzNSArNDYsMzcgQEAKIAl1MTYJYmFzZV9oaWdoOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBkZXNjX3B0ciB7CisJdW5zaWduZWQgc2hvcnQgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJdW5zaWduZWQgc2hvcnQgc2VnbWVudDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBpZHRfZW50cnkgaWR0WzI1Nl07CiAKLQotYXNtICgiLmdsb2JsIGlycV9yZXR1cm5cbiIKLSAgICAgImlycV9yZXR1cm46XG4iCi0gICAgICIgICAgIGFkZGwgICQ0LCAlZXNwXG4iCi0gICAgICIgICAgIHBvcGFcbiIKLSAgICAgIiAgICAgaXJldFxuIik7CitzdHJ1Y3QgZGVzY19wdHIgaWR0X3B0cjsKIAotdm9pZCBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgwKSkpIGRlZmF1bHRfaXNyKHZvaWQpOwotYXNtICgiZGVmYXVsdF9pc3I6IGlyZXRcbiIpOwotCi1hc20gKCJpZHRfcHRyOlxuIgotCSIud29yZAkweDgwMFxuIiAvKiBzaXplIG9mIHRoZSB0YWJsZSA4KjI1NiBieXRlcyAqLwotCSIubG9uZwlpZHRcbiIJIC8qIG9mZnNldCAqLwotCSIud29yZAkweDE4XG4iKTsvKiBkYXRhIHNlZ21lbnQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2FkX2lkdChjb25zdCBzdHJ1Y3QgZGVzY19wdHIgKmR0cikKK3sKKwlhc20gdm9sYXRpbGUoImNzIGxpZHQgJTAiOjoibSIgKCpkdHIpKTsKK30KIAogdm9pZCBzZXRfdmVjdG9yKHU4IGludG51bSwgdm9pZCAqcm91dGluZSkKIHsKLQlpZHRbaW50bnVtXS5iYXNlX2hpZ2ggPSAodTE2KSgodTMyKShyb3V0aW5lICsgZ2QtPnJlbG9jX29mZikgPj4gMTYpOwotCWlkdFtpbnRudW1dLmJhc2VfbG93ID0gKHUxNikoKHUzMikocm91dGluZSArIGdkLT5yZWxvY19vZmYpICYgMHhmZmZmKTsKKwlpZHRbaW50bnVtXS5iYXNlX2hpZ2ggPSAodTE2KSgodTMyKShyb3V0aW5lKSA+PiAxNik7CisJaWR0W2ludG51bV0uYmFzZV9sb3cgPSAodTE2KSgodTMyKShyb3V0aW5lKSAmIDB4ZmZmZik7CiB9CiAKK3ZvaWQgaXJxXzAodm9pZCk7Cit2b2lkIGlycV8xKHZvaWQpOwogCiBpbnQgY3B1X2luaXRfaW50ZXJydXB0cyh2b2lkKQogewogCWludCBpOwogCisJaW50IGlycV9lbnRyeV9zaXplID0gaXJxXzEgLSBpcnFfMDsKKwl2b2lkICppcnFfZW50cnkgPSAodm9pZCAqKWlycV8wOworCiAJLyogSnVzdCBpbiBjYXNlLi4uICovCiAJZGlzYWJsZV9pbnRlcnJ1cHRzKCk7CiAKQEAgLTcwLDEwICs4NSwxNSBAQAogCQlpZHRbaV0uYWNjZXNzID0gMHg4ZTsKIAkJaWR0W2ldLnJlcyA9IDA7CiAJCWlkdFtpXS5zZWxlY3RvciA9IDB4MTA7Ci0JCXNldF92ZWN0b3IoaSwgZGVmYXVsdF9pc3IpOworCQlzZXRfdmVjdG9yKGksIGlycV9lbnRyeSk7CisJCWlycV9lbnRyeSArPSBpcnFfZW50cnlfc2l6ZTsKIAl9CiAKKwlpZHRfcHRyLnNpemUgPSAyNTYgKiA4OworCWlkdF9wdHIuYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKSBpZHQ7CisJaWR0X3B0ci5zZWdtZW50ID0gMHgxODsKKwotCWFzbSAoImNzIGxpZHQgaWR0X3B0clxuIik7CisJbG9hZF9pZHQoJmlkdF9wdHIpOwogCiAJLyogSXQgaXMgbm93IHNhZmUgdG8gZW5hYmxlIGludGVycnVwdHMgKi8KIAllbmFibGVfaW50ZXJydXB0cygpOwpAQCAtODEsNiArMTAxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgX19kb19pcnEoaW50IGlycSkKK3sKKwlwcmludGYoIlVuaGFuZGxlZCBJUlEgOiAlZFxuIiwgaXJxKTsKK30KK3ZvaWQgZG9faXJxKGludCBpcnEpIF9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJfX2RvX2lycSIpKSk7CisKIHZvaWQgZW5hYmxlX2ludGVycnVwdHModm9pZCkKIHsKIAlhc20oInN0aVxuIik7CkBAIC05NCwzICsxMjAsMzgyIEBACiAKIAlyZXR1cm4gKGZsYWdzJjB4MjAwKTsgLyogSUUgZmxhZ3MgaXMgYml0IDkgKi8KIH0KKworLyogSVJRIExvdy1MZXZlbCBTZXJ2aWNlIFJvdXRpbmUgKi8KK19faXNyX18gaXJxX2xsc3IoaW50IGlwLCBpbnQgc2VnLCBpbnQgaXJxKQoreworCS8qCisJICogRm9yIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGVhY2ggZXhjZXB0aW9uLCByZWZlciB0bzoKKwkgKiBJbnRlbK4gNjQgYW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsCisJICogVm9sdW1lIDE6IEJhc2ljIEFyY2hpdGVjdHVyZQorCSAqIE9yZGVyIE51bWJlcjogMjUzNjY1LTAyOVVTLCBOb3ZlbWJlciAyMDA4CisJICogVGFibGUgNi0xLiBFeGNlcHRpb25zIGFuZCBJbnRlcnJ1cHRzCisJICovCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIDB4MDA6CisJCXByaW50ZigiRGl2aWRlIEVycm9yIChEaXZpc2lvbiBieSB6ZXJvKSBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCQl3aGlsZSgxKTsKKwkJYnJlYWs7CisJY2FzZSAweDAxOgorCQlwcmludGYoIkRlYnVnIEludGVycnVwdCAoU2luZ2xlIHN0ZXApIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCWJyZWFrOworCWNhc2UgMHgwMjoKKwkJcHJpbnRmKCJOTUkgSW50ZXJydXB0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCWJyZWFrOworCWNhc2UgMHgwMzoKKwkJcHJpbnRmKCJCcmVha3BvaW50IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCWJyZWFrOworCWNhc2UgMHgwNDoKKwkJcHJpbnRmKCJPdmVyZmxvdyBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCQl3aGlsZSgxKTsKKwkJYnJlYWs7CisJY2FzZSAweDA1OgorCQlwcmludGYoIkJPVU5EIFJhbmdlIEV4Y2VlZGVkIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MDY6CisJCXByaW50ZigiSW52YWxpZCBPcGNvZGUgKFVuRGVmaW5lZCBPcGNvZGUpIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MDc6CisJCXByaW50ZigiRGV2aWNlIE5vdCBBdmFpbGFibGUgKE5vIE1hdGggQ29wcm9jZXNzb3IpIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MDg6CisJCXByaW50ZigiRG91YmxlIGZhdWx0IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MDk6CisJCXByaW50ZigiQ28tcHJvY2Vzc29yIHNlZ21lbnQgb3ZlcnJ1biBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCQl3aGlsZSgxKTsKKwkJYnJlYWs7CisJY2FzZSAweDBhOgorCQlwcmludGYoIkludmFsaWQgVFNTIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCWJyZWFrOworCWNhc2UgMHgwYjoKKwkJcHJpbnRmKCJTZWdtZW50IE5vdCBQcmVzZW50IGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCXdoaWxlKDEpOworCQlicmVhazsKKwljYXNlIDB4MGM6CisJCXByaW50ZigiU3RhY2sgU2VnbWVudCBGYXVsdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCQl3aGlsZSgxKTsKKwkJYnJlYWs7CisJY2FzZSAweDBkOgorCQlwcmludGYoIkdlbmVyYWwgUHJvdGVjdGlvbiBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCQlicmVhazsKKwljYXNlIDB4MGU6CisJCXByaW50ZigiUGFnZSBmYXVsdCBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCQl3aGlsZSgxKTsKKwkJYnJlYWs7CisJY2FzZSAweDBmOgorCQlwcmludGYoIkZsb2F0aW5nLVBvaW50IEVycm9yIChNYXRoIEZhdWx0KSBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCQlicmVhazsKKwljYXNlIDB4MTA6CisJCXByaW50ZigiQWxpZ25tZW50IGNoZWNrIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCWJyZWFrOworCWNhc2UgMHgxMToKKwkJcHJpbnRmKCJNYWNoaW5lIENoZWNrIGF0ICUwNHg6JTA4eFxuIiwgc2VnLCBpcCk7CisJCWJyZWFrOworCWNhc2UgMHgxMjoKKwkJcHJpbnRmKCJTSU1EIEZsb2F0aW5nLVBvaW50IEV4Y2VwdGlvbiBhdCAlMDR4OiUwOHhcbiIsIHNlZywgaXApOworCQlicmVhazsKKwljYXNlIDB4MTM6CisJY2FzZSAweDE0OgorCWNhc2UgMHgxNToKKwljYXNlIDB4MTY6CisJY2FzZSAweDE3OgorCWNhc2UgMHgxODoKKwljYXNlIDB4MTk6CisJY2FzZSAweDFhOgorCWNhc2UgMHgxYjoKKwljYXNlIDB4MWM6CisJY2FzZSAweDFkOgorCWNhc2UgMHgxZToKKwljYXNlIDB4MWY6CisJCXByaW50ZigiUmVzZXJ2ZWQgRXhjZXB0aW9uICVkIGF0ICUwNHg6JTA4eFxuIiwgaXJxLCBzZWcsIGlwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBIYXJkd2FyZSBvciBVc2VyIElSUSAqLworCQlkb19pcnEoaXJxKTsKKwl9Cit9CisKKy8qCisgKiBPSyAtIFRoaXMgbG9va3MgcmVhbGx5IGhvcnJpYmxlLCBidXQgaXQgc2VydmVzIGEgcHVycG9zZSAtIEl0IGhlbHBzIGNyZWF0ZQorICogZnVsbHkgcmVsb2NhdGFibGUgY29kZS4KKyAqICAtIFRoZSBjYWxsIHRvIGlycV9sbHNyIHdpbGwgYmUgYSByZWxhdGl2ZSBqdW1wCisgKiAgLSBUaGUgSVJRIGVudHJpZXMgd2lsbCBiZSBndWFyYW50ZWVkIHRvIGJlIGluIG9yZGVyCisgKiBJdCdzIGEgYml0IGFubm95aW5nIHRoYXQgd2UgbmVlZCB0byB3YXN0ZSAzIGJ5dGVzIHBlciBpbnRlcnJ1cHQgZW50cnkKKyAqICh0b3RhbCBvZiA3NjggY29kZSBieXRlcyksIGJ1dCB3ZSBNVVNUIGNyZWF0ZSBhIFN0YWNrIEZyYW1lIGFuZCB0aGlzIGlzCisgKiB0aGUgZWFzaWVzdCB3YXkgSSBjb3VsZCBkbyBpdC4gTWF5YmUgaXQgY2FuIGJlIG1hZGUgYmV0dGVyIGxhdGVyLgorICovCithc20oIi5nbG9ibCBpcnFfY29tbW9uX2VudHJ5XG4iIFwKKwkiLmhpZGRlbiBpcnFfY29tbW9uX2VudHJ5XG4iIFwKKwkiLnR5cGUgaXJxX2NvbW1vbl9lbnRyeSwgQGZ1bmN0aW9uXG4iIFwKKwkiaXJxX2NvbW1vbl9lbnRyeTpcbiIgXAorCSJwdXNobCAkMFxuIiBcCisJInB1c2hsICQwXG4iIFwKKwkiY2FsbCBpcnFfbGxzclxuIiBcCisJInBvcGwgJWVheFxuIiBcCisJInBvcGwgJWVheFxuIiBcCisJInBvcGwgJWVheFxuIiBcCisJInBvcGFcbiIgXAorCSJsZWF2ZVxuIlwKKwkiaXJldFxuIiBcCisJREVDTEFSRV9JTlRFUlJVUFQoMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDQpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDcpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTEpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgxMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTQpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgxNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMTcpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgxOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjApIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgyMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjMpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgyNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjYpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgyNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMjkpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgzMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDMxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMzIpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgzMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDM0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMzUpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgzNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDM3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoMzgpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCgzOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDQwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNDEpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg0MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDQzKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNDQpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg0NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDQ2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNDcpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg0OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDQ5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNTApIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg1MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDUyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNTMpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg1NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDU1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNTYpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg1NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDU4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNTkpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg2MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDYxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNjIpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg2MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDY0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNjUpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg2NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDY3KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNjgpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg2OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDcwKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNzEpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg3MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDczKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNzQpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg3NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDc2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoNzcpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg3OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDc5KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoODApIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg4MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDgyKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoODMpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg4NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDg1KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoODYpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg4NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDg4KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoODkpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg5MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDkxKSBcCisJREVDTEFSRV9JTlRFUlJVUFQoOTIpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg5MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDk0KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoOTUpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg5NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDk2KSBcCisJREVDTEFSRV9JTlRFUlJVUFQoOTgpIFwKKwlERUNMQVJFX0lOVEVSUlVQVCg5OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEwOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDExOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEyOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDEzOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE0OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE1OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE2OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE3OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE4OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDE5OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIwOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIxOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIyOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzMCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzMSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzMikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzMykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzNCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzNSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzNikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzNykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzOCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDIzOSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0NSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0NikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0NykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0OCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI0OSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI1MCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI1MSkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI1MikgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI1MykgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI1NCkgXAorCURFQ0xBUkVfSU5URVJSVVBUKDI1NSkpOwpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvc2M1MjAvc2M1MjBfdGltZXIuYyBiL2NwdS9pMzg2L3NjNTIwL3NjNTIwX3RpbWVyLmMKaW5kZXggMjNkZTE0Yi4uOTNiNWI1NSAxMDA2NDQKLS0tIGEvY3B1L2kzODYvc2M1MjAvc2M1MjBfdGltZXIuYworKysgYi9jcHUvaTM4Ni9zYzUyMC9zYzUyMF90aW1lci5jCkBAIC0zNSw2ICszNSwxMiBAQAogCiBpbnQgdGltZXJfaW5pdCh2b2lkKQogeworCS8qIFJlZ2lzdGVyIHRoZSBTQzUyMCBzcGVjaWZpYyB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXJlZ2lzdGVyX3RpbWVyX2lzciAoc2M1MjBfdGltZXJfaXNyKTsKKworCS8qIEluc3RhbGwgaW50ZXJydXB0IGhhbmRsZXIgZm9yIEdQIFRpbWVyIDEgKi8KKwlpcnFfaW5zdGFsbF9oYW5kbGVyICgwLCB0aW1lcl9pc3IsIE5VTEwpOworCiAJLyogTWFwIEdQIFRpbWVyIDEgdG8gTWFzdGVyIFBJQyBJUjAgICovCiAJc2M1MjBfbW1jci0+Z3BfdG1yX2ludF9tYXBbMV0gPSAweDAxOwogCkBAIC01NCwxMSArNjAsNiBAQAogCXNjNTIwX21tY3ItPmdwdG1yMW1heGNtcGEgPSAxMDA7CiAJc2M1MjBfbW1jci0+Z3B0bXIxY3RsID0gMHhlMDA5OwogCi0JLyogUmVnaXN0ZXIgdGhlIFNDNTIwIHNwZWNpZmljIHRpbWVyIGludGVycnVwdCBoYW5kbGVyICovCi0JcmVnaXN0ZXJfdGltZXJfaXNyIChzYzUyMF90aW1lcl9pc3IpOwotCi0JLyogSW5zdGFsbCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgR1AgVGltZXIgMSAqLwotCWlycV9pbnN0YWxsX2hhbmRsZXIgKDAsIHRpbWVyX2lzciwgTlVMTCk7CiAJdW5tYXNrX2lycSAoMCk7CiAKIAkvKiBDbGVhciB0aGUgR1AgVGltZXIgMSBzdGF0dXMgcmVnaXN0ZXIgdG8gZ2V0IHRoZSBzaG93IHJvbGxpbmcqLwpAQCAtNjcsNyArNjgsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAlpbnQgbSA9IDA7CiAJbG9uZyB1OwpkaWZmIC0tZ2l0IGEvY3B1L2kzODYvc3RhcnQuUyBiL2NwdS9pMzg2L3N0YXJ0LlMKaW5kZXggNTkwODllZi4uMjVkMzJlNiAxMDA2NDQKLS0tIGEvY3B1L2kzODYvc3RhcnQuUworKysgYi9jcHUvaTM4Ni9zdGFydC5TCkBAIC02MywxMSArNjMsOCBAQAogCWptcCAgICAgbWVtX2luaXQKIG1lbV9pbml0X3JldDoKIAotCS8qIGNoZWNrIGFtbW91bnQgb2YgY29uZmlndXJlZCBtZW1vcnkKLQkgKiAod2UgbmVlZCBhdGxlYXN0IGJzcyBzdGFydCtic3Mgc2l6ZStzdGFjayBzaXplKSAqLwotCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlY3ggICAgICAgIC8qIEJTUyBzdGFydCAqLwotCWFkZGwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVjeCAgICAgICAgIC8qIEJTUyBzaXplICovCi0JYWRkbAkkQ09ORklHX1NZU19TVEFDS19TSVpFLCAlZWN4CisJLyogQ2hlY2sgd2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZvciBzdGFjayAqLworCW1vdmwJJENPTkZJR19TWVNfU1RBQ0tfU0laRSwgJWVjeAogCWNtcGwJJWVjeCwgJWVheAogCWphZQltZW1fb2sKIApAQCAtNzgsNiArNzUsOCBAQAogLnByb2dyZXNzMGE6CiAJam1wCWRpZQogbWVtX29rOgorCS8qIFNldCBzdGFjayBwb2ludGVyIHRvIHVwcGVyIG1lbW9yeSBsaW1pdCovCisJbW92bCAgICAlZWF4LCAlZXNwCiAKIAkvKiBpbmRpY2F0ZSBwcm9ncmVzcyAqLwogCW1vdncJJDB4MDIsICVheApAQCAtODUsMTIgKzg0LDcgQEAKIAlqbXAJc2hvd19ib290X3Byb2dyZXNzX2FzbQogLnByb2dyZXNzMToKIAotCS8qIGNyZWF0ZSBhIHN0YWNrIGFmdGVyIHRoZSBic3MgKi8KLQltb3ZsICAgICRfaTM4NmJvb3RfYnNzX3N0YXJ0LCAlZWF4Ci0JYWRkbAkkX2kzODZib290X2Jzc19zaXplLCAlZWF4Ci0JYWRkbAkkQ09ORklHX1NZU19TVEFDS19TSVpFLCAlZWF4Ci0JbW92bCAgICAlZWF4LCAlZXNwCi0KKwkvKiBUZXN0IHRoZSBzdGFjayAqLwogCXB1c2hsCSQwCiAJcG9wbAklZWF4CiAJY21wbAkkMCwgJWVheApAQCAtMTE2LDExNSArMTEwLDE5IEBACiAJam1wCXNob3dfYm9vdF9wcm9ncmVzc19hc20KIC5wcm9ncmVzczI6CiAKLQkvKiBjb3B5IGRhdGEgc2VjdGlvbiB0byByYW0sIHNpemUgbXVzdCBiZSA0LWJ5dGUgYWxpZ25lZCAqLwotCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX2Rlc3QsICVlZGkJICAvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0JbW92bAkkX2kzODZib290X3JvbWRhdGFfc3RhcnQsICVlc2kJICAvKiBzb3VyY2UgYWRkcmVzcyAqLwotCW1vdmwJJF9pMzg2Ym9vdF9yb21kYXRhX3NpemUsICVlY3ggICAgIC8qIG51bWJlciBvZiBieXRlcyB0byBjb3B5ICovCi0JbW92bAklZWN4LCAlZWF4Ci0JYW5kbAkkMywgJWVheAotCWpueglkYXRhX2ZhaWwKLQotCXNocmwJJDIsICVlY3gJICAgICAgICAgICAgICAgICAgLyogY29weSA0IGJ5dGUgZWFjaCB0aW1lICovCi0JY2xkCi0JY21wbAkkMCwgJWVjeAotCWplCWRhdGFfb2sKLWRhdGFfc2VnbWVudDoKLQltb3ZzbAotCWxvb3AJZGF0YV9zZWdtZW50Ci0Jam1wCWRhdGFfb2sKLWRhdGFfZmFpbDoKLQkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDgzLCAlYXgKLQltb3ZsCSQucHJvZ3Jlc3MyYSwgJWVicAotCWptcAlzaG93X2Jvb3RfcHJvZ3Jlc3NfYXNtCi0ucHJvZ3Jlc3MyYToKLQlqbXAJZGllCi0KLWRhdGFfb2s6Ci0KLQkvKiBpbmRpY2F0ZSBwcm9ncmVzcyAqLwotCW1vdncJJDB4MDQsICVheAotCW1vdmwJJC5wcm9ncmVzczMsICVlYnAKLQlqbXAJc2hvd19ib290X3Byb2dyZXNzX2FzbQotLnByb2dyZXNzMzoKLQotCS8qIGNsZWFyIGJzcyBzZWN0aW9uIGluIHJhbSwgc2l6ZSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICAqLwotCW1vdmwJJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlZGkgICAgICAgIC8qIE1LX0NIRyBCU1Mgc3RhcnQgKi8KLQltb3ZsCSRfaTM4NmJvb3RfYnNzX3NpemUsICVlY3ggICAgICAgICAvKiBCU1Mgc2l6ZSAqLwotCW1vdmwJJWVjeCwgJWVheAotCWFuZGwJJDMsICVlYXgKLQlqbnoJYnNzX2ZhaWwKLQlzaHJsCSQyLCAlZWN4CSAgICAgICAgICAgICAgICAgIC8qIGNsZWFyIDQgYnl0ZSBlYWNoIHRpbWUgKi8KLQljbGQKLQljbXBsCSQwLCAlZWN4Ci0JamUJYnNzX29rCi1ic3M6Ci0JbW92bAkkMCwgKCVlZGkpCi0JYWRkCSQ0LCAlZWRpCi0JbG9vcAlic3MKLQlqbXAJYnNzX29rCi0KLWJzc19mYWlsOgotCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwotCW1vdncJJDB4ODQsICVheAotCW1vdmwJJC5wcm9ncmVzczNhLCAlZWJwCi0Jam1wCXNob3dfYm9vdF9wcm9ncmVzc19hc20KLS5wcm9ncmVzczNhOgotCWptcAlkaWUKLQotYnNzX29rOgotI2lmbmRlZiBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAotCS8qIGluZGljYXRlIHByb2dyZXNzICovCi0JbW92dwkkMHgwNiwgJWF4Ci0JbW92bAkkLnByb2dyZXNzNiwgJWVicAotCWptcAlzaG93X2Jvb3RfcHJvZ3Jlc3NfYXNtCi0ucHJvZ3Jlc3M2OgotCi0JLyogY29weSB0ZXh0IHNlY3Rpb24gdG8gcmFtLCBzaXplIG11c3QgYmUgNC1ieXRlIGFsaWduZWQgKi8KLQltb3ZsCSRDT05GSUdfU1lTX0JMX1NUQVJUX1JBTSwgJWVkaQkJLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLwotCW1vdmwJJFRFWFRfQkFTRSwgJWVzaQkJLyogc291cmNlIGFkZHJlc3MgKi8KLQltb3ZsCSRfaTM4NmJvb3RfdGV4dF9zaXplLCAlZWN4CS8qIG51bWJlciBvZiBieXRlcyB0byBjb3B5ICovCi0JbW92bAklZWN4LCAlZWF4Ci0JYW5kbAkkMywgJWVheAotCWp6CXRleHRfY29weQkJCS8qIEFscmVhZHkgNC1ieXRlIGFsaWduZWQgKi8KLQlzdWJsICAgICQ0LCAlZWF4CQkJLyogQWRkIGV4dHJhIGJ5dGVzIHRvIHNpemUgKi8KLQlhZGRsCSVlYXgsICVlY3gKLXRleHRfY29weToKLQlzaHJsCSQyLCAlZWN4CQkJLyogY29weSA0IGJ5dGUgZWFjaCB0aW1lICovCi0JY2xkCi0JY21wbAkkMCwgJWVjeAotCWplCXRleHRfb2sKLXRleHRfc2VnbWVudDoKLQltb3ZzbAotCWxvb3AJdGV4dF9zZWdtZW50Ci0Jam1wCXRleHRfb2sKLXRleHRfZmFpbDoKLQkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KLQltb3Z3CSQweDg2LCAlYXgKLQltb3ZsCSQucHJvZ3Jlc3M1YSwgJWVicAotCWptcAlzaG93X2Jvb3RfcHJvZ3Jlc3NfYXNtCi0ucHJvZ3Jlc3M1YToKLQlqbXAJZGllCi0KLXRleHRfb2s6Ci0jZW5kaWYKIAl3YmludmQKIAorCS8qIEdldCB1cHBlciBtZW1vcnkgbGltaXQgKi8KKwltb3ZsICVlc3AsICVlY3gKKwlzdWJsICRDT05GSUdfU1lTX1NUQUNLX1NJWkUsICVlY3gKIAotCS8qIGluZGljYXRlIHByb2dyZXNzICovCi0JbW92dwkkMHgwNSwgJWF4Ci0JbW92bAkkLnByb2dyZXNzNCwgJWVicAotCWptcAlzaG93X2Jvb3RfcHJvZ3Jlc3NfYXNtCi0ucHJvZ3Jlc3M0OgorCS8qIENyZWF0ZSBhIFN0YWNrIEZyYW1lICovCisJcHVzaGwgJWVicAorCW1vdmwgJWVzcCwgJWVicAogCi0jaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCi0JLyogSnVtcCB0byB0aGUgUkFNIGNvcHkgb2Ygc3RhcnRfaTM4NmJvb3QgKi8KLQltb3ZsCSRzdGFydF9pMzg2Ym9vdCwgJWVicAotCWFkZGwJJChDT05GSUdfU1lTX0JMX1NUQVJUX1JBTSAtIFRFWFRfQkFTRSksICVlYnAKLQljYWxsCSolZWJwCQkvKiBFbnRlciwgVS1ib290ISAqLwotI2Vsc2UKLQljYWxsCXN0YXJ0X2kzODZib290ICAvKiBFbnRlciwgVS1ib290ISAqLwotI2VuZGlmCisJLyogc3RhY2tfbGltaXQgcGFyYW1ldGVyICovCisJcHVzaGwJJWVjeAorCWNhbGwJYm9hcmRfaW5pdF9mCS8qIEVudGVyLCBVLWJvb3QhICovCiAKIAkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KIAltb3Z3CSQweDg1LCAlYXgKZGlmZiAtLWdpdCBhL2NwdS9peHAvc3RhcnQuUyBiL2NwdS9peHAvc3RhcnQuUwppbmRleCAxOTZiYTVkLi41ZWJjZTUzIDEwMDY0NAotLS0gYS9jcHUvaXhwL3N0YXJ0LlMKKysrIGIvY3B1L2l4cC9zdGFydC5TCkBAIC01MDUsOCArNTA1LDggQEAKIC8qCiAgKiAwIDw9IHIwIDw9IDIwMDAKICAqLwotLmdsb2JsIHVkZWxheQotdWRlbGF5OgorLmdsb2JsIF9fdWRlbGF5CitfX3VkZWxheToKIAltb3YJcjIsICAgICAjMHg2ODAwCiAJb3JyCXIyLCByMiwgIzB4MDBkYgogCW11bAlyMCwgcjIsIHIwCmRpZmYgLS1naXQgYS9jcHUvaXhwL3RpbWVyLmMgYi9jcHUvaXhwL3RpbWVyLmMKaW5kZXggNjg1NjE0OS4uZWRmMzQxZiAxMDA2NDQKLS0tIGEvY3B1L2l4cC90aW1lci5jCisrKyBiL2NwdS9peHAvdGltZXIuYwpAQCAtOTksNyArOTksNyBAQAogCXdoaWxlICghKCpJWFA0MjVfT1NTVCAmIElYUDQyNV9PU1NUX1RJTUVSXzFfUEVORCkpOwogfQogCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXdoaWxlICh1c2VjLS0pIGl4cDQyNV91ZGVsYXkoMSk7CiB9CmRpZmYgLS1naXQgYS9jcHUvbGg3YTQweC90aW1lci5jIGIvY3B1L2xoN2E0MHgvdGltZXIuYwppbmRleCBmOWI1YmUwLi4yNjkxMzE1IDEwMDY0NAotLS0gYS9jcHUvbGg3YTQweC90aW1lci5jCisrKyBiL2NwdS9saDdhNDB4L3RpbWVyLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAl0aW1lc3RhbXAgPSB0OwogfQogCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVsb25nIHRtbyx0bXA7CiAKZGlmZiAtLWdpdCBhL2NwdS9tY2Y1NDd4Xzh4L3NsaWNldGltZXIuYyBiL2NwdS9tY2Y1NDd4Xzh4L3NsaWNldGltZXIuYwppbmRleCA2N2U4MTg5Li44ZGMwMTBhIDEwMDY0NAotLS0gYS9jcHUvbWNmNTQ3eF84eC9zbGljZXRpbWVyLmMKKysrIGIvY3B1L21jZjU0N3hfOHgvc2xpY2V0aW1lci5jCkBAIC00MCw3ICs0MCw3IEBACiAjZW5kaWYKIGV4dGVybiB2b2lkIGR0aW1lcl9pbnRyX3NldHVwKHZvaWQpOwogCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl2b2xhdGlsZSBzbHRfdCAqdGltZXJwID0gKHNsdF90ICopIChDT05GSUdfU1lTX1VERUxBWV9CQVNFKTsKIAl1MzIgbm93LCBmcmVxOwpkaWZmIC0tZ2l0IGEvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzIGIvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzCmluZGV4IGEwZmM4ZjEuLmI0YzYzZTIgMTAwNjQ0Ci0tLSBhL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcworKysgYi9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKQEAgLTU4LDcgKzU4LDYgQEAKICAgLnRleHQgICAgICA6CiAgIHsKICAgICAqKC50ZXh0KQotICAgICooLmZpeHVwKQogICAgICooLmdvdDEpCiAgICB9IDp0ZXh0CiAgICAgX2V0ZXh0ID0gLjsKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvNHh4X3BjaS5jIGIvY3B1L3BwYzR4eC80eHhfcGNpLmMKaW5kZXggZmE1MjFmMC4uZWVkNDUzNCAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC80eHhfcGNpLmMKKysrIGIvY3B1L3BwYzR4eC80eHhfcGNpLmMKQEAgLTczLDIzICs3MywzMCBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAjaW5jbHVkZSA8Y29tbWFuZC5oPgotI2lmICFkZWZpbmVkKENPTkZJR180NDApCiAjaW5jbHVkZSA8YXNtLzR4eF9wY2kuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxwY2kuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKIAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKKyNpZiBkZWZpbmVkKENPTkZJR180MDVHUCkgfHwgZGVmaW5lZChDT05GSUdfNDA1RVApCisKKyNpZiBkZWZpbmVkKENPTkZJR19QTUM0MDUpCit1c2hvcnQgcG1jNDA1X3BjaV9zdWJzeXNfZGV2aWNlaWQodm9pZCk7CisjZW5kaWYKKworLyojZGVmaW5lIERFQlVHKi8KKwogLyoKICAqIEJvYXJkLXNwZWNpZmljIHBjaSBpbml0aWFsaXphdGlvbgogICogUGxhdGZvcm0gY29kZSBjYW4gcmVpbXBsZW1lbnQgcGNpX3ByZV9pbml0KCkgaWYgbmVlZGVkCiAgKi8KIGludCBfX3BjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCiB7Ci0jaWYgZGVmaW5lZCAoQ09ORklHXzQwNUVQKQorI2lmIGRlZmluZWQoQ09ORklHXzQwNUVQKQogCS8qCiAJICogRW5hYmxlIHRoZSBpbnRlcm5hbCBQQ0kgYXJiaXRlciBieSBkZWZhdWx0LgogCSAqCkBAIC0xMDUsMTUgKzExMiw4IEBACiAKIAlyZXR1cm4gMTsKIH0KLWludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19wY2lfcHJlX2luaXQiKSkpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfNDA1R1ApIHx8IGRlZmluZWQoQ09ORklHXzQwNUVQKQotCi0jaWYgZGVmaW5lZChDT05GSUdfUE1DNDA1KQotdXNob3J0IHBtYzQwNV9wY2lfc3Vic3lzX2RldmljZWlkKHZvaWQpOwotI2VuZGlmCi0KLS8qI2RlZmluZSBERUJVRyovCitpbnQgcGNpX3ByZV9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19wY2lfcHJlX2luaXQiKSkpOwogCiBpbnQgX19pc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCiB7CkBAIC0yMzEsNyArMjMxLDcgQEAKIAkJcGNpYXV0b19yZWdpb25faW5pdChob3NlLT5wY2lfZmIpOwogCiAJLyogTGV0IGJvYXJkIGNoYW5nZS9tb2RpZnkgaG9zZSAmIGRvIGluaXRpYWwgY2hlY2tzICovCi0JaWYgKHBjaV9wcmVfaW5pdCAoaG9zZSkgPT0gMCkgeworCWlmIChwY2lfcHJlX2luaXQoaG9zZSkgPT0gMCkgewogCQlwcmludGYoIlBDSTogQm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CiAJCXByaW50ZigiUENJOiBDb25maWd1cmF0aW9uIGFib3J0ZWQuXG4iKTsKIAkJcmV0dXJuOwpAQCAtNDc4LDYgKzQ3OCwyMzEgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBwcGM0NDBfaG9zZSA9IHswfTsKIAorLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCisgKiBwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKKyAqIFBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCisgKiBiaXQgaW4gdGhlIHN0cmFwIHJlZ2lzdGVyLCBvciBnZW5lcmljIGhvc3QvYWRhcHRlciBhc3N1bXB0aW9ucy4KKyAqCisgKiBSYXRoZXIgdGhhbiBoYXJkLWNvZGUgYSBiYWQgYXNzdW1wdGlvbiBpbiB0aGUgZ2VuZXJhbCA0NDAgY29kZSwgdGhlCisgKiA0NDAgcGNpIGNvZGUgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGRlY2lkZSBhdCBydW50aW1lLgorICoKKyAqIFJldHVybiAwIGZvciBhZGFwdGVyIG1vZGUsIG5vbi16ZXJvIGZvciBob3N0IChtb25hcmNoKSBtb2RlLgorICoKKyAqIFdlYWsgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbjogIk5vcm1hbCIgYm9hcmRzIGltcGxlbWVudCB0aGUgUENJCisgKiBob3N0IGZ1bmN0aW9uYWxpdHkuIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gZm9yIFBDSSBhZGFwdGVyIGJvYXJkcy4KKyAqLworaW50IF9faXNfcGNpX2hvc3Qoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQoreworCXJldHVybiAxOworfQoraW50IGlzX3BjaV9ob3N0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19pc19wY2lfaG9zdCIpKSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR180NDBFUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVBYKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfNDQwR1IpIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSWCkKKworI2lmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfVEFSR0VUX0lOSVQpCisvKgorICogcGNpX3RhcmdldF9pbml0CisgKgorICogVGhlIGJvb3RzdHJhcCBjb25maWd1cmF0aW9uIHByb3ZpZGVzIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBwY2kKKyAqIGluYm91bmQgbWFwIChQSU0pLiBCdXQgdGhlIGJvb3RzdHJhcCBjb25maWcgY2hvaWNlcyBhcmUgbGltaXRlZCBhbmQKKyAqIG1heSBub3QgYmUgc3VmZmljaWVudCBmb3IgYSBnaXZlbiBib2FyZC4KKyAqLwordm9pZCBfX3BjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJLyoKKwkgKiBTZXQgdXAgRGlyZWN0IE1NSU8gcmVnaXN0ZXJzCisJICovCisKKwkvKgorCSAqIFBvd2VyUEM0NDAgRVAgUENJIE1hc3RlciBjb25maWd1cmF0aW9uLgorCSAqIE1hcCBvbmUgMUdpZyByYW5nZSBvZiBQTEIvcHJvY2Vzc29yIGFkZHJlc3NlcyB0byBQQ0kgbWVtb3J5IHNwYWNlLgorCSAqIFBMQiBhZGRyZXNzIDB4QTAwMDAwMDAtMHhERkZGRkZGRiA9PT4gUENJIGFkZHJlc3MgMHhBMDAwMDAwMC0weERGRkZGRkZGCisJICogVXNlIGJ5dGUgcmV2ZXJzZWQgb3V0IHJvdXRpbmVzIHRvIGhhbmRsZSBlbmRpYW5lc3MuCisJICogTWFrZSB0aGlzIHJlZ2lvbiBub24tcHJlZmV0Y2hhYmxlLgorCSAqLworCS8qIFBNTTAgTWFzay9BdHRyaWJ1dGUgLSBkaXNhYmxlZCBiNCBzZXR0aW5nICovCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QTU0wTUEsIDB4MDAwMDAwMDApOworCS8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLworCW91dF9sZTMyKCh2b2lkICopUENJTDBfUE1NMExBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsKKwkvKiBQTU0wIFBDSSBMb3cgQWRkcmVzcyAqLworCW91dF9sZTMyKCh2b2lkICopUENJTDBfUE1NMFBDSUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFKTsKKwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KKwlvdXRfbGUzMigodm9pZCAqKVBDSUwwX1BNTTBQQ0lIQSwgMHgwMDAwMDAwMCk7CisJLyogNTEyTSArIE5vIHByZWZldGNoaW5nLCBhbmQgZW5hYmxlIHJlZ2lvbiAqLworCW91dF9sZTMyKCh2b2lkICopUENJTDBfUE1NME1BLCAweEUwMDAwMDAxKTsKKworCS8qIFBNTTEgTWFzay9BdHRyaWJ1dGUgLSBkaXNhYmxlZCBiNCBzZXR0aW5nICovCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QTU0xTUEsIDB4MDAwMDAwMDApOworCS8qIFBNTTEgTG9jYWwgQWRkcmVzcyAqLworCW91dF9sZTMyKCh2b2lkICopUENJTDBfUE1NMUxBLCBDT05GSUdfU1lTX1BDSV9NRU1CQVNFMik7CisJLyogUE1NMSBQQ0kgTG93IEFkZHJlc3MgKi8KKwlvdXRfbGUzMigodm9pZCAqKVBDSUwwX1BNTTFQQ0lMQSwgQ09ORklHX1NZU19QQ0lfTUVNQkFTRTIpOworCS8qIFBNTTEgUENJIEhpZ2ggQWRkcmVzcyAqLworCW91dF9sZTMyKCh2b2lkICopUENJTDBfUE1NMVBDSUhBLCAweDAwMDAwMDAwKTsKKwkvKiA1MTJNICsgTm8gcHJlZmV0Y2hpbmcsIGFuZCBlbmFibGUgcmVnaW9uICovCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QTU0xTUEsIDB4RTAwMDAwMDEpOworCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QVE0xTVMsIDB4MDAwMDAwMDEpOyAvKiBNZW1vcnkgU2l6ZS9BdHRyaWJ1dGUgKi8KKwlvdXRfbGUzMigodm9pZCAqKVBDSUwwX1BUTTFMQSwgMCk7CS8qIExvY2FsIEFkZHIuIFJlZyAqLworCW91dF9sZTMyKCh2b2lkICopUENJTDBfUFRNMk1TLCAwKTsJLyogTWVtb3J5IFNpemUvQXR0cmlidXRlICovCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QVE0yTEEsIDApOwkvKiBMb2NhbCBBZGRyLiBSZWcgKi8KKworCS8qCisJICogU2V0IHVwIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisJICovCisKKwkvKiBQcm9ncmFtIHRoZSBib2FyZCdzIHN1YnN5c3RlbSBpZC92ZW5kb3IgaWQgKi8KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQsCisJCQkgICAgICBDT05GSUdfU1lTX1BDSV9TVUJTWVNfVkVORE9SSUQpOworCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfU1VCU1lTVEVNX0lELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfSUQpOworCisJLyogQ29uZmlndXJlIGNvbW1hbmQgcmVnaXN0ZXIgYXMgYnVzIG1hc3RlciAqLworCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwgUENJX0NPTU1BTkRfTUFTVEVSKTsKKworCS8qIDI0MG5TIFBDSSBjbG9jayAqLworCXBjaV93cml0ZV9jb25maWdfd29yZCgwLCBQQ0lfTEFURU5DWV9USU1FUiwgMSk7CisKKwkvKiBObyBlcnJvciByZXBvcnRpbmcgKi8KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoMCwgUENJX0VSUkVOLCAwKTsKKworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoMCwgUENJX0JSREdPUFQyLCAweDAwMDAwMTAxKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVCAqLworCisvKgorICogcGNpX3ByZV9pbml0CisgKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBqdXN0IHByaW9yIHRvIHJlZ2lzdGVyaW5nIHRoZSBob3NlIGFuZCBnaXZlcworICogdGhlIGJvYXJkIHRoZSBvcHBvcnR1bml0eSB0byBjaGVjayB0aGluZ3MuIFJldHVybmluZyBhIHZhbHVlIG9mIHplcm8KKyAqIGluZGljYXRlcyB0aGF0IHRoaW5ncyBhcmUgYmFkICYgUENJIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSBhYm9ydGVkLgorICoKKyAqIERpZmZlcmVudCBib2FyZHMgbWF5IHdpc2ggdG8gY3VzdG9taXplIHRoZSBwY2kgY29udHJvbGxlciBzdHJ1Y3R1cmUKKyAqIChhZGQgcmVnaW9ucywgb3ZlcnJpZGUgZGVmYXVsdCBhY2Nlc3Mgcm91dGluZXMsIGV0Yykgb3IgcGVyZm9ybQorICogY2VydGFpbiBwcmUtaW5pdGlhbGl6YXRpb24gYWN0aW9ucy4KKyAqCisgKi8KK2ludCBfX3BjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJdTMyIHJlZzsKKworCS8qCisJICogU2V0IHByaW9yaXR5IGZvciBhbGwgUExCMyBkZXZpY2VzIHRvIDAuCisJICogU2V0IFBMQjMgYXJiaXRlciB0byBmYWlyIG1vZGUuCisJICovCisJbWZzZHIoU0QwX0FNUDEsIHJlZyk7CisJbXRzZHIoU0QwX0FNUDEsIChyZWcgJiAweDAwMDAwMEZGKSB8IDB4MDAwMEZGMDApOworCXJlZyA9IG1mZGNyKFBMQjNfQUNSKTsKKwltdGRjcihQTEIzX0FDUiwgcmVnIHwgMHg4MDAwMDAwMCk7CisKKwkvKgorCSAqIFNldCBwcmlvcml0eSBmb3IgYWxsIFBMQjQgZGV2aWNlcyB0byAwLgorCSAqLworCW1mc2RyKFNEMF9BTVAwLCByZWcpOworCW10c2RyKFNEMF9BTVAwLCAocmVnICYgMHgwMDAwMDBGRikgfCAweDAwMDBGRjAwKTsKKwlyZWcgPSBtZmRjcihQTEI0X0FDUikgfCAweGEwMDAwMDAwOworCW10ZGNyKFBMQjRfQUNSLCByZWcpOworCisJLyoKKwkgKiBTZXQgTmVidWxhIFBMQjQgYXJiaXRlciB0byBmYWlyIG1vZGUuCisJICovCisJLyogU2VnbWVudDAgKi8KKwlyZWcgPSAobWZkY3IoUExCMF9BQ1IpICYgflBMQjBfQUNSX1BQTV9NQVNLKSB8IFBMQjBfQUNSX1BQTV9GQUlSOworCXJlZyA9IChyZWcgJiB+UExCMF9BQ1JfSEJVX01BU0spIHwgUExCMF9BQ1JfSEJVX0VOQUJMRUQ7CisJcmVnID0gKHJlZyAmIH5QTEIwX0FDUl9SRFBfTUFTSykgfCBQTEIwX0FDUl9SRFBfNERFRVA7CisJcmVnID0gKHJlZyAmIH5QTEIwX0FDUl9XUlBfTUFTSykgfCBQTEIwX0FDUl9XUlBfMkRFRVA7CisJbXRkY3IoUExCMF9BQ1IsIHJlZyk7CisKKwkvKiBTZWdtZW50MSAqLworCXJlZyA9IChtZmRjcihQTEIxX0FDUikgJiB+UExCMV9BQ1JfUFBNX01BU0spIHwgUExCMV9BQ1JfUFBNX0ZBSVI7CisJcmVnID0gKHJlZyAmIH5QTEIxX0FDUl9IQlVfTUFTSykgfCBQTEIxX0FDUl9IQlVfRU5BQkxFRDsKKwlyZWcgPSAocmVnICYgflBMQjFfQUNSX1JEUF9NQVNLKSB8IFBMQjFfQUNSX1JEUF80REVFUDsKKwlyZWcgPSAocmVnICYgflBMQjFfQUNSX1dSUF9NQVNLKSB8IFBMQjFfQUNSX1dSUF8yREVFUDsKKwltdGRjcihQTEIxX0FDUiwgcmVnKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NZU19QQ0lfQk9BUkRfRklYVVBfSVJRKQorCWhvc2UtPmZpeHVwX2lycSA9IGJvYXJkX3BjaV9maXh1cF9pcnE7CisjZW5kaWYKKworCXJldHVybiAxOworfQorCisjZWxzZSAvKiBkZWZpbmVkKENPTkZJR180NDBFUCkgLi4uICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKQordm9pZCBfX3BjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBob3NlKQoreworCS8qCisJICogRGlzYWJsZSBldmVyeXRoaW5nCisJICovCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QSU0wU0EsIDApOyAvKiBkaXNhYmxlICovCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QSU0xU0EsIDApOyAvKiBkaXNhYmxlICovCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QSU0yU0EsIDApOyAvKiBkaXNhYmxlICovCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9FUk9NQkEsIDApOyAvKiBkaXNhYmxlIGV4cGFuc2lvbiByb20gKi8KKworCS8qCisJICogTWFwIGFsbCBvZiBTRFJBTSB0byBQQ0kgYWRkcmVzcyAweDAwMDBfMDAwMC4gTm90ZSB0aGF0IHRoZSA0NDAKKwkgKiBzdHJhcHBpbmcgb3B0aW9ucyBkbyBub3Qgc3VwcG9ydCBzaXplcyBzdWNoIGFzIDEyOC8yNTYgTUIuCisJICovCisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QSU0wTEFMLCBDT05GSUdfU1lTX1NEUkFNX0JBU0UpOworCW91dF9sZTMyKCh2b2lkICopUENJTDBfUElNMExBSCwgMCk7CisJb3V0X2xlMzIoKHZvaWQgKilQQ0lMMF9QSU0wU0EsIH4oZ2QtPnJhbV9zaXplIC0gMSkgfCAxKTsKKwlvdXRfbGUzMigodm9pZCAqKVBDSUwwX0JBUjAsIDApOworCisJLyoKKwkgKiBQcm9ncmFtIHRoZSBib2FyZCdzIHN1YnN5c3RlbSBpZC92ZW5kb3IgaWQKKwkgKi8KKwlvdXRfbGUxNigodm9pZCAqKVBDSUwwX1NCU1lTVklELCBDT05GSUdfU1lTX1BDSV9TVUJTWVNfVkVORE9SSUQpOworCW91dF9sZTE2KCh2b2lkICopUENJTDBfU0JTWVNJRCwgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0RFVklDRUlEKTsKKworCW91dF9sZTE2KCh2b2lkICopUENJTDBfQ01ELCBpbl9sZTE2KCh2b2lkICopUENJTDBfQ01EKSB8CisJCSBQQ0lfQ09NTUFORF9NRU1PUlkpOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUICovCisKK2ludCBfX3BjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJLyoKKwkgKiBUaGlzIGJvYXJkIGlzIGFsd2F5cyBjb25maWd1cmVkIGFzIHRoZSBob3N0ICYgcmVxdWlyZXMgdGhlCisJICogUENJIGFyYml0ZXIgdG8gYmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAoIXBjaV9hcmJpdGVyX2VuYWJsZWQoKSkgeworCQlwcmludGYoIlBDSTogUENJIEFyYml0ZXIgZGlzYWJsZWQhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR180NDBFUCkgLi4uICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUKQordm9pZCBwY2lfdGFyZ2V0X2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSkKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19wY2lfdGFyZ2V0X2luaXQiKSkpOworI2VuZGlmIC8qIENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUICovCisKK2ludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQorCV9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJfX3BjaV9wcmVfaW5pdCIpKSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUKQordm9pZCBfX3BjaV9tYXN0ZXJfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisJdTE2IHJlZzsKKworCS8qCisJICogV3JpdGUgdGhlIFBvd2VyUEM0NDAgRVAgUENJIENvbmZpZ3VyYXRpb24gcmVncy4KKwkgKiBFbmFibGUgUG93ZXJQQzQ0MCBFUCB0byBiZSBhIG1hc3RlciBvbiB0aGUgUENJIGJ1cyAoUE1NKS4KKwkgKiBFbmFibGUgUG93ZXJQQzQ0MCBFUCB0byBhY3QgYXMgYSBQQ0kgbWVtb3J5IHRhcmdldCAoUFRNKS4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZCgwLCBQQ0lfQ09NTUFORCwgJnJlZyk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKDAsIFBDSV9DT01NQU5ELCByZWcgfAorCQkJICAgICAgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTsKK30KK3ZvaWQgcGNpX21hc3Rlcl9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19wY2lfbWFzdGVyX2luaXQiKSkpOworI2VuZGlmIC8qIENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUICovCiAKIGludCBwY2lfNDQwX2luaXQgKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKIHsKQEAgLTU0OCw3ICs3NzMsNyBAQAogCXBjaV9zZXR1cF9pbmRpcmVjdChob3NlLCBQQ0lMMF9DRkdBRFIsIFBDSUwwX0NGR0RBVEEpOwogCiAJLyogTGV0IGJvYXJkIGNoYW5nZS9tb2RpZnkgaG9zZSAmIGRvIGluaXRpYWwgY2hlY2tzICovCi0JaWYgKHBjaV9wcmVfaW5pdCAoaG9zZSkgPT0gMCkgeworCWlmIChwY2lfcHJlX2luaXQoaG9zZSkgPT0gMCkgewogCQlwcmludGYoIlBDSTogQm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CiAJCXByaW50ZigiUENJOiBDb25maWd1cmF0aW9uIGFib3J0ZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC80eHhfcGNpZS5jIGIvY3B1L3BwYzR4eC80eHhfcGNpZS5jCmluZGV4IDE5ZDJjN2QuLmQ5NjA1YzMgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvNHh4X3BjaWUuYworKysgYi9jcHUvcHBjNHh4LzR4eF9wY2llLmMKQEAgLTQ4LDYgKzQ4LDEyNSBAQAogCUxOS1dfWDgJCQk9IDB4OAogfTsKIAorc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBwY2llX2hvc2VbQ09ORklHX1NZU19QQ0lFX05SX1BPUlRTXTsKKworLyoKKyAqIFBlciBkZWZhdWx0LCBhbGwgY2FyZHMgYXJlIHByZXNlbnQsIHNvIHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlCisgKiBsaW5rIGNvbWVzIHVwLgorICovCitpbnQgX19ib2FyZF9wY2llX2NhcmRfcHJlc2VudChpbnQgcG9ydCkKK3sKKwlyZXR1cm4gMTsKK30KK2ludCBib2FyZF9wY2llX2NhcmRfcHJlc2VudChpbnQgcG9ydCkKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19ib2FyZF9wY2llX2NhcmRfcHJlc2VudCIpKSk7CisKKy8qCisgKiBTb21lIGJvYXJkcyBoYXZlIHJ1bnRpbWUgZGV0ZWN0aW9uIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBQQ0llCisgKiBzbG90IHVzZWQsIHNvIGxldCdzIHByb3ZpZGUgd2VhayBkZWZhdWx0IGZ1bmN0aW9ucyBmb3IgdGhlCisgKiBjb21tb24gdmVyc2lvbi4KKyAqLworaW50IF9fYm9hcmRfcGNpZV9maXJzdCh2b2lkKQoreworCXJldHVybiAwOworfQoraW50IGJvYXJkX3BjaWVfZmlyc3Qodm9pZCkKKwlfX2F0dHJpYnV0ZV9fKCh3ZWFrLCBhbGlhcygiX19ib2FyZF9wY2llX2ZpcnN0IikpKTsKKworaW50IF9fYm9hcmRfcGNpZV9sYXN0KHZvaWQpCit7CisJcmV0dXJuIENPTkZJR19TWVNfUENJRV9OUl9QT1JUUyAtIDE7Cit9CitpbnQgYm9hcmRfcGNpZV9sYXN0KHZvaWQpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9fYm9hcmRfcGNpZV9sYXN0IikpKTsKKwordm9pZCBfX2JvYXJkX3BjaWVfc2V0dXBfcG9ydChpbnQgcG9ydCwgaW50IHJvb3Rwb2ludCkKK3sKKwkvKiBub3RpbmcgaW4gdGhpcyB3ZWFrIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gKi8KK30KK3ZvaWQgYm9hcmRfcGNpZV9zZXR1cF9wb3J0KGludCBwb3J0LCBpbnQgcm9vdHBvaW50KQorCV9fYXR0cmlidXRlX18oKHdlYWssIGFsaWFzKCJfX2JvYXJkX3BjaWVfc2V0dXBfcG9ydCIpKSk7CisKK3ZvaWQgcGNpZV9zZXR1cF9ob3NlcyhpbnQgYnVzbm8pCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworCWludCBpLCBidXM7CisJaW50IHJldCA9IDA7CisJY2hhciAqZW52OworCXVuc2lnbmVkIGludCBkZWxheTsKKwlpbnQgZmlyc3QgPSBib2FyZF9wY2llX2ZpcnN0KCk7CisJaW50IGxhc3QgPSBib2FyZF9wY2llX2xhc3QoKTsKKworCS8qCisJICogQXNzdW1lIHdlJ3JlIGNhbGxlZCBhZnRlciB0aGUgUENJKFgpIGhvc2UocykgYXJlIGluaXRpYWxpemVkLAorCSAqIHdoaWNoIHRha2VzIGJ1cyBJRCAwLi4uIGFuZCB0aGVyZWZvcmUgc3RhcnQgbnVtYmVyaW5nIFBDSWUncworCSAqIGZyb20gdGhlIG5leHQgbnVtYmVyLgorCSAqLworCWJ1cyA9IGJ1c25vOworCisJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7CisJCS8qCisJCSAqIFNvbWUgYm9hcmRzIChlLmcuIEthdG1haSkgY2FuIGRldGVjdHMgdmlhIGhhcmR3YXJlCisJCSAqIGlmIGEgUENJZSBjYXJkIGlzIHBsdWdnZWQsIHNvIGxldCdzIGNoZWNrIHRoaXMuCisJCSAqLworCQlpZiAoIWJvYXJkX3BjaWVfY2FyZF9wcmVzZW50KGkpKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzX2VuZF9wb2ludChpKSkgeworCQkJYm9hcmRfcGNpZV9zZXR1cF9wb3J0KGksIDApOworCQkJcmV0ID0gcHBjNHh4X2luaXRfcGNpZV9lbmRwb3J0KGkpOworCQl9IGVsc2UgeworCQkJYm9hcmRfcGNpZV9zZXR1cF9wb3J0KGksIDEpOworCQkJcmV0ID0gcHBjNHh4X2luaXRfcGNpZV9yb290cG9ydChpKTsKKwkJfQorCQlpZiAocmV0ID09IC1FTk9ERVYpCisJCQljb250aW51ZTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRmKCJQQ0lFJWQ6IGluaXRpYWxpemF0aW9uIGFzICVzIGZhaWxlZFxuIiwgaSwKKwkJCSAgICAgICBpc19lbmRfcG9pbnQoaSkgPyAiZW5kcG9pbnQiIDogInJvb3QtY29tcGxleCIpOworCQkJY29udGludWU7CisJCX0KKworCQlob3NlID0gJnBjaWVfaG9zZVtpXTsKKwkJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXM7CisJCWhvc2UtPmxhc3RfYnVzbm8gPSBidXM7CisJCWhvc2UtPmN1cnJlbnRfYnVzbm8gPSBidXM7CisKKwkJLyogc2V0dXAgbWVtIHJlc291cmNlICovCisJCXBjaV9zZXRfcmVnaW9uKGhvc2UtPnJlZ2lvbnMgKyAwLAorCQkJICAgICAgIENPTkZJR19TWVNfUENJRV9NRU1CQVNFICsgaSAqIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAorCQkJICAgICAgIENPTkZJR19TWVNfUENJRV9NRU1CQVNFICsgaSAqIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAorCQkJICAgICAgIENPTkZJR19TWVNfUENJRV9NRU1TSVpFLAorCQkJICAgICAgIFBDSV9SRUdJT05fTUVNKTsKKwkJaG9zZS0+cmVnaW9uX2NvdW50ID0gMTsKKwkJcGNpX3JlZ2lzdGVyX2hvc2UoaG9zZSk7CisKKwkJaWYgKGlzX2VuZF9wb2ludChpKSkgeworCQkJcHBjNHh4X3NldHVwX3BjaWVfZW5kcG9pbnQoaG9zZSwgaSk7CisJCQkvKgorCQkJICogUmVzb24gZm9yIG5vIHNjYW5uaW5nIGlzIGVuZHBvaW50IGNhbiBub3QgZ2VuZXJhdGUKKwkJCSAqIHVwc3RyZWFtIGNvbmZpZ3VyYXRpb24gYWNjZXNzZXMuCisJCQkgKi8KKwkJfSBlbHNlIHsKKwkJCXBwYzR4eF9zZXR1cF9wY2llX3Jvb3Rwb2ludChob3NlLCBpKTsKKwkJCWVudiA9IGdldGVudiAoInBjaXNjYW5kZWxheSIpOworCQkJaWYgKGVudiAhPSBOVUxMKSB7CisJCQkJZGVsYXkgPSBzaW1wbGVfc3RydG91bChlbnYsIE5VTEwsIDEwKTsKKwkJCQlpZiAoZGVsYXkgPiA1KQorCQkJCQlwcmludGYoIldhcm5pbmcsIGV4cGVjdCBub3RpY2FibGUgZGVsYXkgYmVmb3JlICIKKwkJCQkJICAgICAgICJQQ0llIHNjYW4gZHVlIHRvICdwY2lzY2FuZGVsYXknIHZhbHVlIVxuIik7CisJCQkJbWRlbGF5KGRlbGF5ICogMTAwMCk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBDb25maWcgYWNjZXNzIGNhbiBvbmx5IGdvIGRvd24gc3RyZWFtCisJCQkgKi8KKwkJCWhvc2UtPmxhc3RfYnVzbm8gPSBwY2lfaG9zZV9zY2FuKGhvc2UpOworCQkJYnVzID0gaG9zZS0+bGFzdF9idXNubyArIDE7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgdmFsaWRhdGVfZW5kcG9pbnQoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQogewogCWlmIChob3NlLT5jZmdfZGF0YSA9PSAodTggKilDT05GSUdfU1lTX1BDSUUwX0NGR0JBU0UpCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L2NtZF9jaGlwX2NvbmZpZy5jIGIvY3B1L3BwYzR4eC9jbWRfY2hpcF9jb25maWcuYwppbmRleCBkMzYwZDViLi5iYTU3MjExIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L2NtZF9jaGlwX2NvbmZpZy5jCisrKyBiL2NwdS9wcGM0eHgvY21kX2NoaXBfY29uZmlnLmMKQEAgLTUyLDYgKzUyLDEyIEBACiAJaW50IGN1cl9jb25maWdfbnIgPSAtMTsKIAl1OCBjdXJfY29uZmlnW0NPTkZJR180eHhfQ09ORklHX0JMT0NLU0laRV07CiAKKwkvKgorCSAqIEZpcnN0IHN3aXRjaCB0byBjb3JyZWN0IEkyQyBidXMuIFRoaXMgaXMgSTJDIGJ1cyAwCisJICogZm9yIGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIDR4eCBkZXJpdmF0cy4KKwkgKi8KKwlJMkNfU0VUX0JVUygwKTsKKwogI2lmZGVmIENPTkZJR19DTURfRUVQUk9NCiAJcmV0ID0gZWVwcm9tX3JlYWQoQ09ORklHXzR4eF9DT05GSUdfSTJDX0VFUFJPTV9BRERSLAogCQkJICBDT05GSUdfNHh4X0NPTkZJR19JMkNfRUVQUk9NX09GRlNFVCwKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvY29uZmlnLm1rIGIvY3B1L3BwYzR4eC9jb25maWcubWsKaW5kZXggMDBhZDM5Yi4uOTc5MDA0YiAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9jb25maWcubWsKKysrIGIvY3B1L3BwYzR4eC9jb25maWcubWsKQEAgLTMyLDMgKzMyLDYgQEAKIGVsc2UKIFBMQVRGT1JNX0NQUEZMQUdTICs9IC1XYSwtbTQwNSAtbWNwdT00MDUKIGVuZGlmCisKKyMgVXNlIGRlZmF1bHQgbGlua2VyIHNjcmlwdC4gIEJvYXJkIHBvcnQgY2FuIG92ZXJyaWRlIGluIGJvYXJkLyovY29uZmlnLm1rCitMRFNDUklQVCA6PSAkKFNSQ1RSRUUpL2NwdS9wcGM0eHgvdS1ib290LmxkcwpkaWZmIC0tZ2l0IGEvY3B1L3BwYzR4eC9jcHUuYyBiL2NwdS9wcGM0eHgvY3B1LmMKaW5kZXggZTFiMDBhNy4uNzNkNGQwNiAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9jcHUuYworKysgYi9jcHUvcHBjNHh4L2NwdS5jCkBAIC04MSw3ICs4MSw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmICFkZWZpbmVkKENPTkZJR19JT1A0ODApICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfNDA1KSAmJiAhZGVmaW5lZChDT05GSUdfNDA1RVgpCi1zdGF0aWMgaW50IHBjaV9hcmJpdGVyX2VuYWJsZWQodm9pZCkKK2ludCBwY2lfYXJiaXRlcl9lbmFibGVkKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfNDA1R1ApCiAJcmV0dXJuIChtZmRjcihDUEMwX1BTUikgJiBQU1JfUENJX0FSQklUX0VOKTsKZGlmZiAtLWdpdCBhL2NwdS9wcGM0eHgvaTJjLmMgYi9jcHUvcHBjNHh4L2kyYy5jCmluZGV4IGUzZTFiYWIuLjc5NzZlNzUgMTAwNjQ0Ci0tLSBhL2NwdS9wcGM0eHgvaTJjLmMKKysrIGIvY3B1L3BwYzR4eC9pMmMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAoQykgQ29weXJpZ2h0IDIwMDcKKyAqIChDKSBDb3B5cmlnaHQgMjAwNy0yMDA5CiAgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCiAgKgogICogYmFzZWQgb24gd29yayBieSBBbm5lIFNvcGhpZSBIYXJub2lzIDxhbm5lLXNvcGhpZS5oYXJub2lzQG5leHRyZWFtLmZyPgpAQCAtMzcsNyArMzcsOCBAQAogREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfTVVMVElfQlVTKQotLyogSW5pdGlhbGl6ZSB0aGUgYnVzIHBvaW50ZXIgdG8gd2hhdGV2ZXIgb25lIHRoZSBTUEQgRUVQUk9NIGlzIG9uLgorLyoKKyAqIEluaXRpYWxpemUgdGhlIGJ1cyBwb2ludGVyIHRvIHdoYXRldmVyIG9uZSB0aGUgU1BEIEVFUFJPTSBpcyBvbi4KICAqIERlZmF1bHQgaXMgYnVzIDAuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBERFIgaW5pdGlhbGl6YXRpb24KICAqIHJ1bnMgZnJvbSBST00sIGFuZCB3ZSBjYW4ndCBzd2l0Y2ggYnVzZXMgYmVjYXVzZSB3ZSBjYW4ndCBtb2RpZnkKICAqIHRoZSBnbG9iYWwgdmFyaWFibGVzLgpAQCAtNDUsNTkgKzQ2LDYzIEBACiAjaWZuZGVmIENPTkZJR19TWVNfU1BEX0JVU19OVU0KICNkZWZpbmUgQ09ORklHX1NZU19TUERfQlVTX05VTQkwCiAjZW5kaWYKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaTJjX2J1c19udW0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZGF0YSIpKSkgPSBDT05GSUdfU1lTX1NQRF9CVVNfTlVNOworc3RhdGljIHVuc2lnbmVkIGludCBpMmNfYnVzX251bSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5kYXRhIikpKSA9CisJQ09ORklHX1NZU19TUERfQlVTX05VTTsKICNlbmRpZiAvKiBDT05GSUdfSTJDX01VTFRJX0JVUyAqLwogCiBzdGF0aWMgdm9pZCBfaTJjX2J1c19yZXNldCh2b2lkKQogeworCXN0cnVjdCBwcGM0eHhfaTJjICppMmMgPSAoc3RydWN0IHBwYzR4eF9pMmMgKilJMkNfQkFTRV9BRERSOwogCWludCBpOwogCXU4IGRjOwogCiAJLyogUmVzZXQgc3RhdHVzIHJlZ2lzdGVyICovCiAJLyogd3JpdGUgMSBpbiBTQ01QIGFuZCBJUlFBIHRvIGNsZWFyIHRoZXNlIGZpZWxkcyAqLwotCW91dF84KCh1OCAqKUlJQ19TVFMsIDB4MEEpOworCW91dF84KCZpMmMtPnN0cywgMHgwQSk7CiAKIAkvKiB3cml0ZSAxIGluIElSUVAgSVJRRCBMQSBJQ1QgWEZSQSB0byBjbGVhciB0aGVzZSBmaWVsZHMgKi8KLQlvdXRfOCgodTggKilJSUNfRVhUU1RTLCAweDhGKTsKKwlvdXRfOCgmaTJjLT5leHRzdHMsIDB4OEYpOwogCiAJLyogUGxhY2UgY2hpcCBpbiB0aGUgcmVzZXQgc3RhdGUgKi8KLQlvdXRfOCgodTggKilJSUNfWFRDTlRMU1MsIElJQ19YVENOVExTU19TUlNUKTsKKwlvdXRfOCgmaTJjLT54dGNudGxzcywgSUlDX1hUQ05UTFNTX1NSU1QpOwogCiAJLyogQ2hlY2sgaWYgYnVzIGlzIGZyZWUgKi8KLQlkYyA9IGluXzgoKHU4ICopSUlDX0RJUkVDVENOVEwpOworCWRjID0gaW5fOCgmaTJjLT5kaXJlY3RjbnRsKTsKIAlpZiAoIURJUkNUTkxfRlJFRShkYykpewogCQkvKiBUcnkgdG8gc2V0IGJ1cyBmcmVlIHN0YXRlICovCi0JCW91dF84KCh1OCAqKUlJQ19ESVJFQ1RDTlRMLCBJSUNfRElSQ05UTF9TREFDIHwgSUlDX0RJUkNOVExfU0NDKTsKKwkJb3V0XzgoJmkyYy0+ZGlyZWN0Y250bCwgSUlDX0RJUkNOVExfU0RBQyB8IElJQ19ESVJDTlRMX1NDQyk7CiAKIAkJLyogV2FpdCB1bnRpbCB3ZSByZWdhaW4gYnVzIGNvbnRyb2wgKi8KIAkJZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKSB7Ci0JCQlkYyA9IGluXzgoKHU4ICopSUlDX0RJUkVDVENOVEwpOworCQkJZGMgPSBpbl84KCZpMmMtPmRpcmVjdGNudGwpOwogCQkJaWYgKERJUkNUTkxfRlJFRShkYykpCiAJCQkJYnJlYWs7CiAKIAkJCS8qIFRvZ2dsZSBTQ0wgbGluZSAqLwogCQkJZGMgXj0gSUlDX0RJUkNOVExfU0NDOwotCQkJb3V0XzgoKHU4ICopSUlDX0RJUkVDVENOVEwsIGRjKTsKKwkJCW91dF84KCZpMmMtPmRpcmVjdGNudGwsIGRjKTsKIAkJCXVkZWxheSgxMCk7CiAJCQlkYyBePSBJSUNfRElSQ05UTF9TQ0M7Ci0JCQlvdXRfOCgodTggKilJSUNfRElSRUNUQ05UTCwgZGMpOworCQkJb3V0XzgoJmkyYy0+ZGlyZWN0Y250bCwgZGMpOwogCQl9CiAJfQogCiAJLyogUmVtb3ZlIHJlc2V0ICovCi0Jb3V0XzgoKHU4ICopSUlDX1hUQ05UTFNTLCAwKTsKKwlvdXRfOCgmaTJjLT54dGNudGxzcywgMCk7CiB9CiAKLXZvaWQgaTJjX2luaXQoaW50IHNwZWVkLCBpbnQgc2xhdmVhZGQpCit2b2lkIGkyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGZyZXFPUEI7CisJc3RydWN0IHBwYzR4eF9pMmMgKmkyYyA9IChzdHJ1Y3QgcHBjNHh4X2kyYyAqKUkyQ19CQVNFX0FERFI7CiAJaW50IHZhbCwgZGl2aXNvcjsKIAlpbnQgYnVzOwogCiAjaWZkZWYgQ09ORklHX1NZU19JMkNfSU5JVF9CT0FSRAotCS8qIGNhbGwgYm9hcmQgc3BlY2lmaWMgaTJjIGJ1cyByZXNldCByb3V0aW5lIGJlZm9yZSBhY2Nlc3NpbmcgdGhlICAgKi8KLQkvKiBlbnZpcm9ubWVudCwgd2hpY2ggbWlnaHQgYmUgaW4gYSBjaGlwIG9uIHRoYXQgYnVzLiBGb3IgZGV0YWlscyAgICovCi0JLyogYWJvdXQgdGhpcyBwcm9ibGVtIHNlZSBkb2MvSTJDX0VkZ2VfQ29uZGl0aW9ucy4gICAgICAgICAgICAgICAgICAqLworCS8qCisJICogQ2FsbCBib2FyZCBzcGVjaWZpYyBpMmMgYnVzIHJlc2V0IHJvdXRpbmUgYmVmb3JlIGFjY2Vzc2luZyB0aGUKKwkgKiBlbnZpcm9ubWVudCwgd2hpY2ggbWlnaHQgYmUgaW4gYSBjaGlwIG9uIHRoYXQgYnVzLiBGb3IgZGV0YWlscworCSAqIGFib3V0IHRoaXMgcHJvYmxlbSBzZWUgZG9jL0kyQ19FZGdlX0NvbmRpdGlvbnMuCisJICovCiAJaTJjX2luaXRfYm9hcmQoKTsKICNlbmRpZgogCkBAIC0xMDksNTQgKzExNCw1MiBAQAogCQlfaTJjX2J1c19yZXNldCgpOwogCiAJCS8qIGNsZWFyIGxvIG1hc3RlciBhZGRyZXNzICovCi0JCW91dF84KCh1OCAqKUlJQ19MTUFEUiwgMCk7CisJCW91dF84KCZpMmMtPmxtYWRyLCAwKTsKIAogCQkvKiBjbGVhciBoaSBtYXN0ZXIgYWRkcmVzcyAqLwotCQlvdXRfOCgodTggKilJSUNfSE1BRFIsIDApOworCQlvdXRfOCgmaTJjLT5obWFkciwgMCk7CiAKIAkJLyogY2xlYXIgbG8gc2xhdmUgYWRkcmVzcyAqLwotCQlvdXRfOCgodTggKilJSUNfTFNBRFIsIDApOworCQlvdXRfOCgmaTJjLT5sc2FkciwgMCk7CiAKIAkJLyogY2xlYXIgaGkgc2xhdmUgYWRkcmVzcyAqLwotCQlvdXRfOCgodTggKilJSUNfSFNBRFIsIDApOworCQlvdXRfOCgmaTJjLT5oc2FkciwgMCk7CiAKIAkJLyogQ2xvY2sgZGl2aWRlIFJlZ2lzdGVyICovCi0JCS8qIGdldCBPUEIgZnJlcXVlbmN5ICovCi0JCWZyZXFPUEIgPSBnZXRfT1BCX2ZyZXEoKTsKLQkJLyogc2V0IGRpdmlzb3IgYWNjb3JkaW5nIHRvIGZyZXFPUEIgKi8KLQkJZGl2aXNvciA9IChmcmVxT1BCIC0gMSkgLyAxMDAwMDAwMDsKKwkJLyogc2V0IGRpdmlzb3IgYWNjb3JkaW5nIHRvIGZyZXFfb3BiICovCisJCWRpdmlzb3IgPSAoZ2V0X09QQl9mcmVxKCkgLSAxKSAvIDEwMDAwMDAwOwogCQlpZiAoZGl2aXNvciA9PSAwKQogCQkJZGl2aXNvciA9IDE7Ci0JCW91dF84KCh1OCAqKUlJQ19DTEtESVYsIGRpdmlzb3IpOworCQlvdXRfOCgmaTJjLT5jbGtkaXYsIGRpdmlzb3IpOwogCiAJCS8qIG5vIGludGVycnVwdHMgKi8KLQkJb3V0XzgoKHU4ICopSUlDX0lOVFJNU0ssIDApOworCQlvdXRfOCgmaTJjLT5pbnRybXNrLCAwKTsKIAogCQkvKiBjbGVhciB0cmFuc2ZlciBjb3VudCAqLwotCQlvdXRfOCgodTggKilJSUNfWEZSQ05ULCAwKTsKKwkJb3V0XzgoJmkyYy0+eGZyY250LCAwKTsKIAogCQkvKiBjbGVhciBleHRlbmRlZCBjb250cm9sICYgc3RhdCAqLwogCQkvKiB3cml0ZSAxIGluIFNSQyBTUlMgU1dDIFNXUyB0byBjbGVhciB0aGVzZSBmaWVsZHMgKi8KLQkJb3V0XzgoKHU4ICopSUlDX1hUQ05UTFNTLCAweEYwKTsKKwkJb3V0XzgoJmkyYy0+eHRjbnRsc3MsIDB4RjApOwogCiAJCS8qIE1vZGUgQ29udHJvbCBSZWdpc3RlcgogCQkgICBGbHVzaCBTbGF2ZS9NYXN0ZXIgZGF0YSBidWZmZXIgKi8KLQkJb3V0XzgoKHU4ICopSUlDX01EQ05UTCwgSUlDX01EQ05UTF9GU0RCIHwgSUlDX01EQ05UTF9GTURCKTsKKwkJb3V0XzgoJmkyYy0+bWRjbnRsLCBJSUNfTURDTlRMX0ZTREIgfCBJSUNfTURDTlRMX0ZNREIpOwogCi0JCXZhbCA9IGluXzgoKHU4ICopSUlDX01EQ05UTCk7CisJCXZhbCA9IGluXzgoJmkyYy0+bWRjbnRsKTsKIAogCQkvKiBJZ25vcmUgR2VuZXJhbCBDYWxsLCBzbGF2ZSB0cmFuc2ZlcnMgYXJlIGlnbm9yZWQsCiAJCSAqIGRpc2FibGUgaW50ZXJydXB0cywgZXhpdCB1bmtub3duIGJ1cyBzdGF0ZSwgZW5hYmxlIGhvbGQKIAkJICogU0NMIDEwMGtIeiBub3JtYWx5IG9yIEZhc3RNb2RlIGZvciA0MDBrSHogYW5kIGFib3ZlCiAJCSAqLwogCi0JCXZhbCB8PSBJSUNfTURDTlRMX0VVQlN8SUlDX01EQ05UTF9IU0NMOworCQl2YWwgfD0gSUlDX01EQ05UTF9FVUJTIHwgSUlDX01EQ05UTF9IU0NMOwogCQlpZiAoc3BlZWQgPj0gNDAwMDAwKQogCQkJdmFsIHw9IElJQ19NRENOVExfRlNNOwotCQlvdXRfOCgodTggKilJSUNfTURDTlRMLCB2YWwpOworCQlvdXRfOCgmaTJjLT5tZGNudGwsIHZhbCk7CiAKIAkJLyogY2xlYXIgY29udHJvbCByZWcgKi8KLQkJb3V0XzgoKHU4ICopSUlDX0NOVEwsIDB4MDApOworCQlvdXRfOCgmaTJjLT5jbnRsLCAweDAwKTsKIAl9CiAKIAkvKiBzZXQgdG8gU1BEIGJ1cyBhcyBkZWZhdWx0IGJ1cyB1cG9uIHBvd2VydXAgKi8KQEAgLTE5NSwxMyArMTk4LDE0IEBACiAJCQl1bnNpZ25lZCBjaGFyIGRhdGFbXSwKIAkJCXVuc2lnbmVkIHNob3J0IGRhdGFfbGVuKQogewotCXVuc2lnbmVkIGNoYXIqIHB0cjsKKwlzdHJ1Y3QgcHBjNHh4X2kyYyAqaTJjID0gKHN0cnVjdCBwcGM0eHhfaTJjICopSTJDX0JBU0VfQUREUjsKKwl1OCAqcHRyOwogCWludCByZWFkaW5nOwotCWludCB0cmFuLGNudDsKKwlpbnQgdHJhbiwgY250OwogCWludCByZXN1bHQ7CiAJaW50IHN0YXR1czsKIAlpbnQgaTsKLQl1Y2hhciBjcmVnOworCXU4IGNyZWc7CiAKIAlpZiAoZGF0YSA9PSAwIHx8IGRhdGFfbGVuID09IDApIHsKIAkJLyogRG9uJ3Qgc3VwcG9ydCBkYXRhIHRyYW5zZmVyIG9mIG5vIGxlbmd0aCBvciB0byBhZGRyZXNzIDAgKi8KQEAgLTIxOSwxMiArMjIzLDEzIEBACiAJfQogCiAJLyogQ2xlYXIgU3RvcCBDb21wbGV0ZSBCaXQgKi8KLQlvdXRfOCgodTggKilJSUNfU1RTLCBJSUNfU1RTX1NDTVApOworCW91dF84KCZpMmMtPnN0cywgSUlDX1NUU19TQ01QKTsKKwogCS8qIENoZWNrIGluaXQgKi8KIAlpID0gMTA7CiAJZG8gewogCQkvKiBHZXQgc3RhdHVzICovCi0JCXN0YXR1cyA9IGluXzgoKHU4ICopSUlDX1NUUyk7CisJCXN0YXR1cyA9IGluXzgoJmkyYy0+c3RzKTsKIAkJaS0tOwogCX0gd2hpbGUgKChzdGF0dXMgJiBJSUNfU1RTX1BUKSAmJiAoaSA+IDApKTsKIApAQCAtMjMyLDEzICsyMzcsMTYgQEAKIAkJcmVzdWx0ID0gSUlDX05PS19UT1VUOwogCQlyZXR1cm4ocmVzdWx0KTsKIAl9CisKIAkvKiBmbHVzaCB0aGUgTWFzdGVyL1NsYXZlIERhdGFidWZmZXJzICovCi0Jb3V0XzgoKHU4ICopSUlDX01EQ05UTCwgKChpbl84KCh1OCAqKUlJQ19NRENOVEwpKXxJSUNfTURDTlRMX0ZNREJ8SUlDX01EQ05UTF9GU0RCKSk7CisJb3V0XzgoJmkyYy0+bWRjbnRsLCBpbl84KCZpMmMtPm1kY250bCkgfAorCSAgICAgIElJQ19NRENOVExfRk1EQiB8IElJQ19NRENOVExfRlNEQik7CisKIAkvKiBuZWVkIHRvIHdhaXQgNCBPUEIgY2xvY2tzPyBjb2RlIGJlbG93IHNob3VsZCB0YWtlIHRoYXQgbG9uZyAqLwogCiAJLyogNy1iaXQgYWRyZXNzaW5nICovCi0Jb3V0XzgoKHU4ICopSUlDX0hNQURSLCAwKTsKLQlvdXRfOCgodTggKilJSUNfTE1BRFIsIGNoaXApOworCW91dF84KCZpMmMtPmhtYWRyLCAwKTsKKwlvdXRfOCgmaTJjLT5sbWFkciwgY2hpcCk7CiAKIAl0cmFuID0gMDsKIAlyZXN1bHQgPSBJSUNfT0s7CkBAIC0yNDcsOSArMjU1LDEwIEBACiAJd2hpbGUgKHRyYW4gIT0gY250ICYmIChyZXN1bHQgPT0gSUlDX09LKSkgewogCQlpbnQgIGJjLGo7CiAKLQkJLyogQ29udHJvbCByZWdpc3RlciA9Ci0JCSAqIE5vcm1hbCB0cmFuc2ZlciwgNy1iaXRzIGFkcmVzc2luZywgVHJhbnNmZXIgdXAgdG8gYmMgYnl0ZXMsIE5vcm1hbCBzdGFydCwKLQkJICogVHJhbnNmZXIgaXMgYSBzZXF1ZW5jZSBvZiB0cmFuc2ZlcnMKKwkJLyoKKwkJICogQ29udHJvbCByZWdpc3RlciA9CisJCSAqIE5vcm1hbCB0cmFuc2ZlciwgNy1iaXRzIGFkcmVzc2luZywgVHJhbnNmZXIgdXAgdG8KKwkJICogYmMgYnl0ZXMsIE5vcm1hbCBzdGFydCwgVHJhbnNmZXIgaXMgYSBzZXF1ZW5jZSBvZiB0cmFuc2ZlcnMKIAkJICovCiAJCWNyZWcgfD0gSUlDX0NOVExfUFQ7CiAKQEAgLTI1OSwzMiArMjY4LDM2IEBACiAJCWlmICgoIWNtZF90eXBlICYmIChwdHIgPT0gYWRkcikpIHx8ICgodHJhbiArIGJjKSAhPSBjbnQpKQogCQkJY3JlZyB8PSBJSUNfQ05UTF9DSFQ7CiAKLQkJaWYgKHJlYWRpbmcpCisJCWlmIChyZWFkaW5nKSB7CiAJCQljcmVnIHw9IElJQ19DTlRMX1JFQUQ7Ci0JCWVsc2UKLQkJCWZvcihqPTA7IGogPCBiYzsgaisrKQorCQl9IGVsc2UgeworCQkJZm9yKGogPSAwOyBqIDwgYmM7IGorKykgewogCQkJCS8qIFNldCBidWZmZXIgKi8KLQkJCQlvdXRfOCgodTggKilJSUNfTURCVUYsIHB0clt0cmFuK2pdKTsKLQkJb3V0XzgoKHU4ICopSUlDX0NOVEwsIGNyZWcpOworCQkJCW91dF84KCZpMmMtPm1kYnVmLCBwdHJbdHJhbiArIGpdKTsKKwkJCX0KKwkJfQorCQlvdXRfOCgmaTJjLT5jbnRsLCBjcmVnKTsKIAotCQkvKiBUcmFuc2ZlciBpcyBpbiBwcm9ncmVzcworCQkvKgorCQkgKiBUcmFuc2ZlciBpcyBpbiBwcm9ncmVzcwogCQkgKiB3ZSBoYXZlIHRvIHdhaXQgZm9yIHVwdG8gNSBieXRlcyBvZiBkYXRhCiAJCSAqIDEgYnl0ZSBjaGlwIGFkZHJlc3Mrci93IGJpdCB0aGVuIGJjIGJ5dGVzCiAJCSAqIG9mIGRhdGEuCiAJCSAqIHVkZWxheSgxMCkgaXMgMSBiaXQgdGltZSBhdCAxMDBraHoKIAkJICogRG91YmxlZCBmb3Igc2xvcC4gMjAgaXMgdG9vIHNtYWxsLgogCQkgKi8KLQkJaSA9IDIqNSo4OworCQlpID0gMiAqIDUgKiA4OwogCQlkbyB7CiAJCQkvKiBHZXQgc3RhdHVzICovCi0JCQlzdGF0dXMgPSBpbl84KCh1OCAqKUlJQ19TVFMpOworCQkJc3RhdHVzID0gaW5fOCgmaTJjLT5zdHMpOwogCQkJdWRlbGF5KDEwKTsKIAkJCWktLTsKLQkJfSB3aGlsZSAoKHN0YXR1cyAmIElJQ19TVFNfUFQpICYmICEoc3RhdHVzICYgSUlDX1NUU19FUlIpICYmIChpID4gMCkpOworCQl9IHdoaWxlICgoc3RhdHVzICYgSUlDX1NUU19QVCkgJiYgIShzdGF0dXMgJiBJSUNfU1RTX0VSUikgJiYKKwkJCSAoaSA+IDApKTsKIAogCQlpZiAoc3RhdHVzICYgSUlDX1NUU19FUlIpIHsKIAkJCXJlc3VsdCA9IElJQ19OT0s7Ci0JCQlzdGF0dXMgPSBpbl84KCh1OCAqKUlJQ19FWFRTVFMpOworCQkJc3RhdHVzID0gaW5fOCgmaTJjLT5leHRzdHMpOwogCQkJLyogTG9zdCBhcmJpdHJhdGlvbj8gKi8KIAkJCWlmIChzdGF0dXMgJiBJSUNfRVhUU1RTX0xBKQogCQkJCXJlc3VsdCA9IElJQ19OT0tfTEE7CkBAIC0yOTcsMTkgKzMxMCwyMSBAQAogCQl9IGVsc2UgaWYgKCBzdGF0dXMgJiBJSUNfU1RTX1BUKSB7CiAJCQlyZXN1bHQgPSBJSUNfTk9LX1RPVVQ7CiAJCX0KKwogCQkvKiBDb21tYW5kIGlzIHJlYWRpbmcgPT4gZ2V0IGJ1ZmZlciAqLwogCQlpZiAoKHJlYWRpbmcpICYmIChyZXN1bHQgPT0gSUlDX09LKSkgewogCQkJLyogQXJlIHRoZXJlIGRhdGEgaW4gYnVmZmVyICovCiAJCQlpZiAoc3RhdHVzICYgSUlDX1NUU19NREJTKSB7CiAJCQkJLyoKLQkJCQkgKiBldmVuIGlmIHdlIGhhdmUgZGF0YSB3ZSBoYXZlIHRvIHdhaXQgNE9QQiBjbG9ja3MKLQkJCQkgKiBmb3IgaXQgdG8gaGl0IHRoZSBmcm9udCBvZiB0aGUgRklGTywgYWZ0ZXIgdGhhdAotCQkJCSAqIHdlIGNhbiBqdXN0IHJlYWQuIFdlIHNob3VsZCBjaGVjayBYRkNOVCBoZXJlIGFuZAotCQkJCSAqIGlmIHRoZSBGSUZPIGlzIGZ1bGwgdGhlcmUgaXMgbm8gbmVlZCB0byB3YWl0LgorCQkJCSAqIGV2ZW4gaWYgd2UgaGF2ZSBkYXRhIHdlIGhhdmUgdG8gd2FpdCA0T1BCCisJCQkJICogY2xvY2tzIGZvciBpdCB0byBoaXQgdGhlIGZyb250IG9mIHRoZSBGSUZPLAorCQkJCSAqIGFmdGVyIHRoYXQgd2UgY2FuIGp1c3QgcmVhZC4gV2Ugc2hvdWxkIGNoZWNrCisJCQkJICogWEZDTlQgaGVyZSBhbmQgaWYgdGhlIEZJRk8gaXMgZnVsbCB0aGVyZSBpcworCQkJCSAqIG5vIG5lZWQgdG8gd2FpdC4KIAkJCQkgKi8KIAkJCQl1ZGVsYXkoMSk7Ci0JCQkJZm9yIChqPTA7IGo8YmM7IGorKykKLQkJCQkJcHRyW3RyYW4ral0gPSBpbl84KCh1OCAqKUlJQ19NREJVRik7CisJCQkJZm9yIChqID0gMDsgaiA8IGJjOyBqKyspCisJCQkJCXB0clt0cmFuICsgal0gPSBpbl84KCZpMmMtPm1kYnVmKTsKIAkJCX0gZWxzZQogCQkJCXJlc3VsdCA9IElJQ19OT0tfREFUQTsKIAkJfQpAQCAtMzI0LDcgKzMzOSw3IEBACiAJCQkJY3JlZyA9IElJQ19DTlRMX1JQU1Q7CiAJCX0KIAl9Ci0JcmV0dXJuIChyZXN1bHQpOworCXJldHVybiByZXN1bHQ7CiB9CiAKIGludCBpMmNfcHJvYmUodWNoYXIgY2hpcCkKQEAgLTMzOCwxNyArMzUzLDE3IEBACiAJICogYWRkcmVzcyB3YXMgPEFDSz5lZCAoaS5lLiB0aGVyZSB3YXMgYSBjaGlwIGF0IHRoYXQgYWRkcmVzcyB3aGljaAogCSAqIGRyb3ZlIHRoZSBkYXRhIGxpbmUgbG93KS4KIAkgKi8KLQlyZXR1cm4gKGkyY190cmFuc2ZlcigxLCBjaGlwIDw8IDEsIDAsMCwgYnVmLCAxKSAhPSAwKTsKKwlyZXR1cm4gKGkyY190cmFuc2ZlcigxLCBjaGlwIDw8IDEsIDAsIDAsIGJ1ZiwgMSkgIT0gMCk7CiB9CiAKLQotaW50IGkyY19yZWFkKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sIHVjaGFyICogYnVmZmVyLCBpbnQgbGVuKQorc3RhdGljIGludCBwcGM0eHhfaTJjX3RyYW5zZmVyKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWZmZXIsCisJCQkgICAgICAgaW50IGxlbiwgaW50IHJlYWQpCiB7CiAJdWNoYXIgeGFkZHJbNF07CiAJaW50IHJldDsKIAogCWlmIChhbGVuID4gNCkgewotCQlwcmludGYgKCJJMkMgcmVhZDogYWRkciBsZW4gJWQgbm90IHN1cHBvcnRlZFxuIiwgYWxlbik7CisJCXByaW50ZigiSTJDOiBhZGRyIGxlbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCBhbGVuKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0zNzMsNTAgKzM4OCwzMCBAQAogCSAqIGhpZGRlbiBpbiB0aGUgY2hpcCBhZGRyZXNzLgogCSAqLwogCWlmIChhbGVuID4gMCkKLQkJY2hpcCB8PSAoKGFkZHIgPj4gKGFsZW4gKiA4KSkgJiBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyk7CisJCWNoaXAgfD0gKChhZGRyID4+IChhbGVuICogOCkpICYKKwkJCSBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyk7CiAjZW5kaWYKLQlpZiAoKHJldCA9IGkyY190cmFuc2ZlcigxLCBjaGlwPDwxLCAmeGFkZHJbNC1hbGVuXSwgYWxlbiwgYnVmZmVyLCBsZW4pKSAhPSAwKSB7Ci0JCWlmIChnZC0+aGF2ZV9jb25zb2xlKQotCQkJcHJpbnRmKCAiSTJjIHJlYWQ6IGZhaWxlZCAlZFxuIiwgcmV0KTsKKwlpZiAoKHJldCA9IGkyY190cmFuc2ZlcihyZWFkLCBjaGlwIDw8IDEsICZ4YWRkcls0IC0gYWxlbl0sIGFsZW4sCisJCQkJYnVmZmVyLCBsZW4pKSAhPSAwKSB7CisJCWlmIChnZC0+aGF2ZV9jb25zb2xlKSB7CisJCQlwcmludGYoIkkyQyAlczogZmFpbGVkICVkXG4iLAorCQkJICAgICAgIHJlYWQgPyAicmVhZCIgOiAid3JpdGUiLCByZXQpOworCQl9CisKIAkJcmV0dXJuIDE7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpMmNfd3JpdGUodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwgdWNoYXIgKiBidWZmZXIsIGludCBsZW4pCitpbnQgaTJjX3JlYWQodWNoYXIgY2hpcCwgdWludCBhZGRyLCBpbnQgYWxlbiwgdWNoYXIgKiBidWZmZXIsIGludCBsZW4pCiB7Ci0JdWNoYXIgeGFkZHJbNF07Ci0KLQlpZiAoYWxlbiA+IDQpIHsKLQkJcHJpbnRmICgiSTJDIHdyaXRlOiBhZGRyIGxlbiAlZCBub3Qgc3VwcG9ydGVkXG4iLCBhbGVuKTsKLQkJcmV0dXJuIDE7Ci0KLQl9Ci0KLQlpZiAoYWxlbiA+IDApIHsKLQkJeGFkZHJbMF0gPSAoYWRkciA+PiAyNCkgJiAweEZGOwotCQl4YWRkclsxXSA9IChhZGRyID4+IDE2KSAmIDB4RkY7Ci0JCXhhZGRyWzJdID0gKGFkZHIgPj4gOCkgJiAweEZGOwotCQl4YWRkclszXSA9IGFkZHIgJiAweEZGOwotCX0KLQotI2lmZGVmIENPTkZJR19TWVNfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XCi0JLyoKLQkgKiBFRVBST00gY2hpcHMgdGhhdCBpbXBsZW1lbnQgImFkZHJlc3Mgb3ZlcmZsb3ciIGFyZSBvbmVzCi0JICogbGlrZSBDYXRhbHlzdCAyNFdDMDQvMDgvMTYgd2hpY2ggaGFzIDkvMTAvMTEgYml0cyBvZgotCSAqIGFkZHJlc3MgYW5kIHRoZSBleHRyYSBiaXRzIGVuZCB1cCBpbiB0aGUgImNoaXAgYWRkcmVzcyIKLQkgKiBiaXQgc2xvdHMuIFRoaXMgbWFrZXMgYSAyNFdDMDggKDFLYnl0ZSkgY2hpcCBsb29rIGxpa2UKLQkgKiBmb3VyIDI1NiBieXRlIGNoaXBzLgotCSAqCi0JICogTm90ZSB0aGF0IHdlIGNvbnNpZGVyIHRoZSBsZW5ndGggb2YgdGhlIGFkZHJlc3MgZmllbGQgdG8KLQkgKiBzdGlsbCBiZSBvbmUgYnl0ZSBiZWNhdXNlIHRoZSBleHRyYSBhZGRyZXNzIGJpdHMgYXJlCi0JICogaGlkZGVuIGluIHRoZSBjaGlwIGFkZHJlc3MuCi0JICovCi0JaWYgKGFsZW4gPiAwKQotCQljaGlwIHw9ICgoYWRkciA+PiAoYWxlbiAqIDgpKSAmIENPTkZJR19TWVNfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XKTsKLSNlbmRpZgorCXJldHVybiBwcGM0eHhfaTJjX3RyYW5zZmVyKGNoaXAsIGFkZHIsIGFsZW4sIGJ1ZmZlciwgbGVuLCAxKTsKK30KIAotCXJldHVybiAoaTJjX3RyYW5zZmVyKDAsIGNoaXA8PDEsICZ4YWRkcls0LWFsZW5dLCBhbGVuLCBidWZmZXIsIGxlbiApICE9IDApOworaW50IGkyY193cml0ZSh1Y2hhciBjaGlwLCB1aW50IGFkZHIsIGludCBhbGVuLCB1Y2hhciAqIGJ1ZmZlciwgaW50IGxlbikKK3sKKwlyZXR1cm4gcHBjNHh4X2kyY190cmFuc2ZlcihjaGlwLCBhZGRyLCBhbGVuLCBidWZmZXIsIGxlbiwgMCk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JMkNfTVVMVElfQlVTKQpkaWZmIC0tZ2l0IGEvYm9hcmQvcGNzNDQwZXAvdS1ib290LmxkcyBiL2NwdS9wcGM0eHgvdS1ib290LmxkcwpzaW1pbGFyaXR5IGluZGV4IDcxJQpyZW5hbWUgZnJvbSBib2FyZC9wY3M0NDBlcC91LWJvb3QubGRzCnJlbmFtZSB0byBjcHUvcHBjNHh4L3UtYm9vdC5sZHMKaW5kZXggMmY2MTA5MS4uMmI0NzkzNCAxMDA2NDQKLS0tIGEvYm9hcmQvcGNzNDQwZXAvdS1ib290LmxkcworKysgYi9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKQEAgLTEsNiArMSw1IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDA2Ci0gKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAgKiBwcm9qZWN0LgpAQCAtMjEsMjEgKzIwLDIzIEBACiAgKiBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKKyNpbmNsdWRlICJjb25maWcuaCIJLyogQ09ORklHX0JPQVJERElSICovCisKKyNpZm5kZWYgUkVTRVRfVkVDVE9SX0FERFJFU1MKKyNkZWZpbmUgUkVTRVRfVkVDVE9SX0FERFJFU1MJMHhmZmZmZmZmYworI2VuZGlmCisKIE9VVFBVVF9BUkNIKHBvd2VycGMpCiAvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPwogICAgX19EWU5BTUlDID0gMDsgICAgKi8KLVNFQ1RJT05TCitQSERSUwogewotICAucmVzZXR2ZWMgMHhGRkZGRkZGQyA6Ci0gIHsKLSAgICAqKC5yZXNldHZlYykKLSAgfSA9IDB4ZmZmZgotCi0gIC5ib290cGcgMHhGRkZGRjAwMCA6Ci0gIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC5ib290cGcpCi0gIH0gPSAweGZmZmYKKyAgdGV4dCBQVF9MT0FEOworICBic3MgUFRfTE9BRDsKK30KIAorU0VDVElPTlMKK3sKICAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCiAgIC4gPSArIFNJWkVPRl9IRUFERVJTOwogICAuaW50ZXJwIDogeyAqKC5pbnRlcnApIH0KQEAgLTYyLDIwICs2MywxNiBAQAogICAucGx0IDogeyAqKC5wbHQpIH0KICAgLnRleHQgICAgICA6CiAgIHsKLSAgICBjcHUvcHBjNHh4L3N0YXJ0Lm8JKC50ZXh0KQotICAgIGJvYXJkL3BjczQ0MGVwL2luaXQubwkoLnRleHQpCi0gICAgbGliX2dlbmVyaWMvc2hhMS5vCQkoLnRleHQpCi0KICAgICAqKC50ZXh0KQogICAgICooLmdvdDEpCi0gIH0KLSAgX2V0ZXh0ID0gLjsKLSAgUFJPVklERSAoZXRleHQgPSAuKTsKLSAgLnJvZGF0YSAgICA6Ci0gIHsKKyAgIH0gOnRleHQKKyAgICBfZXRleHQgPSAuOworICAgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgICAgLnJvZGF0YSAgICA6CisgICB7CiAgICAgKiguZWhfZnJhbWUpCiAgICAgKihTT1JUX0JZX0FMSUdOTUVOVChTT1JUX0JZX05BTUUoLnJvZGF0YSopKSkKLSAgfQorICB9IDp0ZXh0CiAgIC5maW5pICAgICAgOiB7ICooLmZpbmkpICAgIH0gPTAKICAgLmN0b3JzICAgICA6IHsgKiguY3RvcnMpICAgfQogICAuZHRvcnMgICAgIDogeyAqKC5kdG9ycykgICB9CkBAIC0xMjQsNiArMTIxLDM5IEBACiAgIC4gPSBBTElHTigyNTYpOwogICBfX2luaXRfZW5kID0gLjsKIAorI2lmZGVmIENPTkZJR180NDAKKyAgLmJvb3RwZyBSRVNFVF9WRUNUT1JfQUREUkVTUyAtIDB4ZmZjIDoKKyAgeworICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKKworICAgIC8qCisgICAgICogUFBDNDQwIGJvYXJkIG5lZWQgYSBib2FyZCBzcGVjaWZpYyBvYmplY3Qgd2l0aCB0aGUKKyAgICAgKiBUTEIgZGVmaW5pdGlvbnMuIFRoaXMgbmVlZHMgdG8gZ2V0IGluY2x1ZGVkIHJpZ2h0IGFmdGVyCisgICAgICogc3RhcnQubywgc2luY2UgdGhlIGZpcnN0IHNoYWRvdyBUTEIgb25seSBjb3ZlcnMgNGsKKyAgICAgKiBvZiBhZGRyZXNzIHNwYWNlLgorICAgICAqLworICAgIENPTkZJR19CT0FSRERJUi9pbml0Lm8JKC5ib290cGcpCisgIH0gOnRleHQgPSAweGZmZmYKKyNlbmRpZgorCisgIC5yZXNldHZlYyBSRVNFVF9WRUNUT1JfQUREUkVTUyA6CisgIHsKKyAgICAqKC5yZXNldHZlYykKKyAgfSA6dGV4dCA9IDB4ZmZmZgorCisgIC4gPSBSRVNFVF9WRUNUT1JfQUREUkVTUyArIDB4NDsKKworICAvKgorICAgKiBNYWtlIHN1cmUgdGhhdCB0aGUgYnNzIHNlZ21lbnQgaXNuJ3QgbGlua2VkIGF0IDB4MCwgb3RoZXJ3aXNlIGl0cworICAgKiBhZGRyZXNzIHdvbid0IGJlIHVwZGF0ZWQgZHVyaW5nIHJlbG9jYXRpb24gZml4dXBzLiAgTm90ZSB0aGF0CisgICAqIHRoaXMgaXMgYSB0ZW1wb3JhcnkgZml4LiAgQ29kZSB0byBkeW5hbWljYWxseSB0aGUgZml4dXAgdGhlIGJzcworICAgKiBsb2NhdGlvbiB3aWxsIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuICBXaGVuIHRoZSBic3MgcmVsb2NhdGlvbgorICAgKiBmaXh1cCBjb2RlIGlzIHByZXNlbnQgdGhpcyB3b3JrYXJvdW5kIHNob3VsZCBiZSByZW1vdmVkLgorICAgKi8KKyNpZiAoUkVTRVRfVkVDVE9SX0FERFJFU1MgPT0gMHhmZmZmZmZmYykKKyAgLiB8PSAweDEwOworI2VuZGlmCisKICAgX19ic3Nfc3RhcnQgPSAuOwogICAuYnNzIChOT0xPQUQpICAgICAgIDoKICAgewpAQCAtMTMxLDkgKzE2MSw5IEBACiAgICAqKC5keW5ic3MpCiAgICAqKC5ic3MpCiAgICAqKENPTU1PTikKLSAgIC4gPSBBTElHTig0KTsKLSAgfQorICB9IDpic3MKIAorICAuID0gQUxJR04oNCk7CiAgIF9lbmQgPSAuIDsKICAgUFJPVklERSAoZW5kID0gLik7CiB9CmRpZmYgLS1naXQgYS9jcHUvcHhhL3RpbWVyLmMgYi9jcHUvcHhhL3RpbWVyLmMKaW5kZXggZTJkZjNhNS4uOGQwZjgyNiAxMDA2NDQKLS0tIGEvY3B1L3B4YS90aW1lci5jCisrKyBiL2NwdS9weGEvdGltZXIuYwpAQCAtNzgsNyArNzgsNyBAQAogCS8qIG5vcCAqLwogfQogCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVkZWxheV9tYXNrZWQgKHVzZWMpOwogfQpkaWZmIC0tZ2l0IGEvY3B1L3MzYzQ0YjAvdGltZXIuYyBiL2NwdS9zM2M0NGIwL3RpbWVyLmMKaW5kZXggMzQxODRhYi4uNmYxZDhmNiAxMDA2NDQKLS0tIGEvY3B1L3MzYzQ0YjAvdGltZXIuYworKysgYi9jcHUvczNjNDRiMC90aW1lci5jCkBAIC03NSw3ICs3NSw3IEBACiAJdGltZXN0YW1wID0gdDsKIH0KIAotdm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl1bG9uZyB0bW87CiAKZGlmZiAtLWdpdCBhL2NwdS9zYTExMDAvdGltZXIuYyBiL2NwdS9zYTExMDAvdGltZXIuYwppbmRleCAzZjc3ZTgxLi4wMjA3NTAxIDEwMDY0NAotLS0gYS9jcHUvc2ExMTAwL3RpbWVyLmMKKysrIGIvY3B1L3NhMTEwMC90aW1lci5jCkBAIC00OSw3ICs0OSw3IEBACiAJLyogbm9wICovCiB9CiAKLXZvaWQgdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCiB7CiAJdWRlbGF5X21hc2tlZCAodXNlYyk7CiB9CmRpZmYgLS1naXQgYS9kb2MvUkVBRE1FLmRhdmluY2kgYi9kb2MvUkVBRE1FLmRhdmluY2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2ZjBkNAotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9SRUFETUUuZGF2aW5jaQpAQCAtMCwwICsxLDExNiBAQAorU3VtbWFyeQorPT09PT09PQorCitUaGlzIFJFQURNRSBpcyBhYm91dCBVLUJvb3Qgc3VwcG9ydCBmb3IgVEkncyBBUk0gOTI2RUpTIGJhc2VkIGZhbWlseSBvZiBTb0NzLgorVGhlc2UgU09DcyBhcmUgdXNlZCBmb3IgY2FtZXJhcywgdmlkZW8gc2VjdXJpdHkgYW5kIHN1cnZlaWxsYW5jZSwgRFZSJ3MsIGV0Yy4KK0RhVmluY2kgU09DJ3MgY29tcHJpc2Ugb2YgRE02NDR4LCBETTY0NngsIERNMzV4IGFuZCBETTM2eCBzZXJpZXMgb2YgU09DJ3MKK0FkZGl0aW9uYWxseSB0aGVyZSBhcmUgc29tZSBTT0NzIG1lYW50IGZvciB0aGUgYXVkaW8gbWFya2V0IHdoaWNoIHRob3VnaCBoYXZlCithbiBPTUFQIHBhcnQgbnVtYmVyIGFyZSB2ZXJ5IHNpbWlsYXIgdG8gdGhlIERhVmluY2kgc2VyaWVzIG9mIFNPQydzCitBZGRpdGlvbmFsbHksIHNvbWUgZmFtaWx5IG1lbWJlcnMgY29udGFpbiBhIFRJIERTUCBhbmQvb3IgZ3JhcGhpY3MKK2NvIHByb2Nlc3NvcnMgYWxvbmcgd2l0aCBhIGhvc3Qgb2Ygb3RoZXIgcGVyaXBoZXJhbHMuCisKK0N1cnJlbnRseSB0aGUgZm9sbG93aW5nIGJvYXJkcyBhcmUgc3VwcG9ydGVkOgorCisqIFRJIERhVmluY2kgRE02NDR4IEVWTQorCisqIFRJIERhVmluY2kgRE02NDZ4IEVWTQorCisqIFRJIERhVmluY2kgRE0zNTUgRVZNCisKKyogVEkgRGFWaW5jaSBETTM2NSBFVk0KKworKiBUSSBEQTgzMCBFVk0KKworKiBETTM1NSBiYXNlZCBMZW9wYXJkIGJvYXJkCisKKyogRE02NDR4IGJhc2VkIHNjaG1vb2dpZSBib2FyZAorCisqIERNNjQ0eCBiYXNlZCBzZmZzZHIgYm9hcmQKKworKiBETTY0NHggYmFzZWQgc29uYXRhIGJvYXJkCisKK0J1aWxkCis9PT09PQorCisqIFRJIERhVmluY2kgRE02NDR4IEVWTToKKworbWFrZSBkYXZpbmNpX2R2ZXZtX2NvbmZpZworbWFrZQorCisqIFRJIERhVmluY2kgRE02NDZ4IEVWTToKKworbWFrZSBkYXZpbmNpX2RtNjQ2N2V2bV9jb25maWcKK21ha2UKKworKiBUSSBEYVZpbmNpIERNMzU1IEVWTToKKworbWFrZSBkYXZpbmNpX2RtMzU1ZXZtX2NvbmZpZworbWFrZQorCisqIFRJIERhVmluY2kgRE0zNjUgRVZNOgorCittYWtlIGRhdmluY2lfZG0zNjVldm1fY29uZmlnCittYWtlCisKKyogVEkgREE4MzAgRVZNOgorCittYWtlIGRhODMwZXZtX2NvbmZpZworbWFrZQorCisqIERNMzU1IGJhc2VkIExlb3BhcmQgYm9hcmQ6CisKK21ha2UgZGF2aW5jaV9kbTM1NWxlb3BhcmRfY29uZmlnCittYWtlCisKKyogRE02NDR4IGJhc2VkIHNjaG1vb2dpZSBib2FyZDoKKworbWFrZSBkYXZpbmNpX3NjaG1vb2dpZV9jb25maWcKK21ha2UKKworKiBETTY0NHggYmFzZWQgc2Zmc2RyIGJvYXJkOgorCittYWtlIGRhdmluY2lfc2Zmc2RyX2NvbmZpZworbWFrZQorCisqIERNNjQ0eCBiYXNlZCBzb25hdGEgYm9hcmQ6CisKK21ha2UgZGF2aW5jaV9zb25hdGFfY29uZmlnCittYWtlCisKK0Jvb3Rsb2FkZXJzCis9PT09PT09PT09PT09PT0KKworVGhlIERhVmluY2kgU09DJ3MgdXNlIDIgYm9vdGxvYWRlcnMuIFRoZSBsb3cgbGV2ZWwgaW5pdGlhbGl6YXRpb24KK2lzIGRvbmUgYnkgYSBVQkwodXNlciBib290IGxvYWRlcikuIFRoZSBVQkwgaXMgd3JpdHRlbiB0byBhIE5BTkQvTk9SL1NQSSBmbGFzaAorYnkgYSBwcm9ncmFtbWVyLiBEdXJpbmcgaW5pdGlhbCBib290dXAsIHRoZSBST00gQm9vdGxvYWRlciByZWFkcyB0aGUgVUJMCitmcm9tIGEgc3RvcmFnZSBkZXZpY2UgYW5kIGxvYWRzIGl0IGludG8gdGhlIElSQU0uIFRoZSBVQkwgdGhlbiBsb2FkcyB0aGUgVS1Cb290CitpbnRvIHRoZSBSQU0uCitUaGUgcHJvZ3JhbW1lcnMgYW5kIFVCTCBhcmUgYWx3YXlzIHJlbGVhc2VkIGFzIHBhcnQgb2YgYW55IHN0YW5kYXJkIFRJCitzb2Z0d2FyZSByZWxlYXNlIGFzc29jaWF0ZWQgd2l0aCBhbiBTT0MuCisKK0xpbmtzCis9PT09PQorCisxKSBUSSBEYVZpbmNpIERNMzU1IEVWTToKK2h0dHA6Ly9mb2N1cy50aS5jb20vZG9jcy9wcm9kL2ZvbGRlcnMvcHJpbnQvdG1zMzIwZG0zNTUuaHRtbAoraHR0cDovL3d3dy5zcGVjdHJ1bWRpZ2l0YWwuY29tL3Byb2R1Y3RfaW5mby5waHA/Y1BhdGg9MTAzJnByb2R1Y3RzX2lkPTIwMyZvc0NzaWQ9YzQ5OWFmNjA4NzMxN2YxMWIzZGExOWI0ZThmMWFmMzIKKworMikgVEkgRGFWaW5jaSBETTM2NSBFVk06CitodHRwOi8vZm9jdXMudGkuY29tL2RvY3MvcHJvZC9mb2xkZXJzL3ByaW50L3RtczMyMGRtMzY1Lmh0bWw/MjQ3U0VNPQoraHR0cDovL3N1cHBvcnQuc3BlY3RydW1kaWdpdGFsLmNvbS9ib2FyZHMvZXZtZG0zNjUvcmV2Yy8KKworMykgRGFWaW5jaSBETTM1NSBiYXNlZCBsZW9wYXJkIGJvYXJkCitodHRwOi8vZGVzaWduc29tZXRoaW5nLm9yZy9sZW9wYXJkYm9hcmQvZGVmYXVsdC5hc3B4CitodHRwOi8vd3d3LnNwZWN0cnVtZGlnaXRhbC5jb20vcHJvZHVjdF9pbmZvLnBocD9jUGF0aD0xMDMmcHJvZHVjdHNfaWQ9MTkyJm9zQ3NpZD02N2MyMDMzNTY2OGZmYzU3Y2IzNTcyNzEwNmViMjRiMQorCis0KSBUSSBEYVZpbmNpIERNNjQ2NyBFVk06CitodHRwOi8vZm9jdXMudGkuY29tL2RvY3MvcHJvZC9mb2xkZXJzL3ByaW50L3RtczMyMGRtNjQ2Ny5odG1sCitodHRwOi8vc3VwcG9ydC5zcGVjdHJ1bWRpZ2l0YWwuY29tL2JvYXJkcy9ldm1kbTY0NjcvcmV2Zi8KKworNSkgVEkgRGFWaW5jaSBETTY0NDYgRVZNOgoraHR0cDovL2ZvY3VzLnRpLmNvbS9kb2NzL3Byb2QvZm9sZGVycy9wcmludC90bXMzMjBkbTY0NDYuaHRtbAoraHR0cDovL3d3dy5zcGVjdHJ1bWRpZ2l0YWwuY29tL3Byb2R1Y3RfaW5mby5waHA/Y1BhdGg9MTAzJnByb2R1Y3RzX2lkPTIyMgorCis2KSBUSSBEQTgzMCBFVk0KK2h0dHA6Ly9mb2N1cy50aS5jb20vYXBwcy9kb2NzL2dlbmNvbnRlbnQudHNwP2FwcElkPTEmY29udGVudElkPTUyMzg1CitodHRwOi8vd3d3LnNwZWN0cnVtZGlnaXRhbC5jb20vcHJvZHVjdF9pbmZvLnBocD9jUGF0aD0zNyZwcm9kdWN0c19pZD0yMTQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvTWFrZWZpbGUKaW5kZXggNGExMjk3Ni4uYjg2MGU4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvTWFrZWZpbGUKQEAgLTMzLDYgKzMzLDcgQEAKIENPQkpTLSQoQ09ORklHX0RSSVZFUl9PTUFQMTUxMF9JMkMpICs9IG9tYXAxNTEwX2kyYy5vCiBDT0JKUy0kKENPTkZJR19EUklWRVJfT01BUDI0WFhfSTJDKSArPSBvbWFwMjR4eF9pMmMubwogQ09CSlMtJChDT05GSUdfRFJJVkVSX09NQVAzNFhYX0kyQykgKz0gb21hcDI0eHhfaTJjLm8KK0NPQkpTLSQoQ09ORklHX1BDQTk1NjRfSTJDKSArPSBwY2E5NTY0X2kyYy5vCiBDT0JKUy0kKENPTkZJR19EUklWRVJfUzNDMjRYMF9JMkMpICs9IHMzYzI0eDBfaTJjLm8KIENPQkpTLSQoQ09ORklHX1MzQzQ0QjBfSTJDKSArPSBzM2M0NGIwX2kyYy5vCiBDT0JKUy0kKENPTkZJR19TT0ZUX0kyQykgKz0gc29mdF9pMmMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYmZpbi10d2lfaTJjLmMgYi9kcml2ZXJzL2kyYy9iZmluLXR3aV9pMmMuYwppbmRleCBlNzkwNjM0Li43M2E3OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9iZmluLXR3aV9pMmMuYworKysgYi9kcml2ZXJzL2kyYy9iZmluLXR3aV9pMmMuYwpAQCAtMjYsNiArMjYsNyBAQAogCiAjaWZkZWYgVFdJMF9DTEtESVYKICNkZWZpbmUgYmZpbl93cml0ZV9UV0lfQ0xLRElWKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGVfVFdJMF9DTEtESVYodmFsKQorI2RlZmluZSBiZmluX3JlYWRfVFdJX0NMS0RJVih2YWwpICAgICAgICAgICAgYmZpbl9yZWFkX1RXSTBfQ0xLRElWKHZhbCkKICNkZWZpbmUgYmZpbl93cml0ZV9UV0lfQ09OVFJPTCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGVfVFdJMF9DT05UUk9MKHZhbCkKICNkZWZpbmUgYmZpbl9yZWFkX1RXSV9DT05UUk9MKHZhbCkgICAgICAgICAgIGJmaW5fcmVhZF9UV0kwX0NPTlRST0wodmFsKQogI2RlZmluZSBiZmluX3dyaXRlX1RXSV9NQVNURVJfQUREUih2YWwpICAgICAgYmZpbl93cml0ZV9UV0kwX01BU1RFUl9BRERSKHZhbCkKQEAgLTQ0LDggKzQ1LDIxIEBACiAjaWZkZWYgQ09ORklHX1RXSUNMS19LSFoKICMgZXJyb3IgZG8gbm90IGRlZmluZSBDT05GSUdfVFdJQ0xLX0tIWiAuLi4gdXNlIENPTkZJR19TWVNfSTJDX1NQRUVECiAjZW5kaWYKLSNpZiBDT05GSUdfU1lTX0kyQ19TUEVFRCA+IDQwMDAwMAotIyBlcnJvciBUaGUgQmxhY2tmaW4gSTJDIGhhcmR3YXJlIGNhbiBvbmx5IG9wZXJhdGUgYXQgNDAwS0h6IG1heAorCisvKgorICogVGhlIHdheSBzcGVlZCBpcyBjaGFuZ2VkIGludG8gZHV0eSBvZnRlbiByZXN1bHRzIGluIGludGVnZXIgdHJ1bmNhdGlvbgorICogd2l0aCA1MCUgZHV0eSwgc28gd2UnbGwgZm9yY2Ugcm91bmRpbmcgdXAgdG8gdGhlIG5leHQgZHV0eSBieSBhZGRpbmcgMQorICogdG8gdGhlIG1heC4gIEluIHByYWN0aWNlIHRoaXMgd2lsbCBnZXQgdXMgYSBzcGVlZCBvZiBzb21ldGhpbmcgbGlrZQorICogMzg1IEtIei4gIFRoZSBvdGhlciBsaW1pdCBpcyBlYXN5IHRvIGhhbmRsZSBhcyBpdCBpcyBvbmx5IDggYml0cy4KKyAqLworI2RlZmluZSBJMkNfU1BFRURfTUFYICAgICAgICAgICAgIDQwMDAwMAorI2RlZmluZSBJMkNfU1BFRURfVE9fRFVUWShzcGVlZCkgICg1MDAwMDAwIC8gKHNwZWVkKSkKKyNkZWZpbmUgSTJDX0RVVFlfTUFYICAgICAgICAgICAgICAoSTJDX1NQRUVEX1RPX0RVVFkoSTJDX1NQRUVEX01BWCkgKyAxKQorI2RlZmluZSBJMkNfRFVUWV9NSU4gICAgICAgICAgICAgIDB4ZmYJLyogOCBiaXQgbGltaXRlZCAqLworI2RlZmluZSBTWVNfSTJDX0RVVFkgICAgICAgICAgICAgIEkyQ19TUEVFRF9UT19EVVRZKENPTkZJR19TWVNfSTJDX1NQRUVEKQorLyogTm90ZTogZHV0eSBpcyBpbnZlcnNlIG9mIHNwZWVkLCBzbyB0aGUgY29tcGFyaXNvbnMgYmVsb3cgYXJlIGNvcnJlY3QgKi8KKyNpZiBTWVNfSTJDX0RVVFkgPCBJMkNfRFVUWV9NQVggfHwgU1lTX0kyQ19EVVRZID4gSTJDX0RVVFlfTUlOCisjIGVycm9yICJUaGUgQmxhY2tmaW4gSTJDIGhhcmR3YXJlIGNhbiBvbmx5IG9wZXJhdGUgMjBLSHogLSA0MDBLSHoiCiAjZW5kaWYKIAogLyogQWxsIHRyYW5zZmVycyBhcmUgZGVzY3JpYmVkIGJ5IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgKi8KQEAgLTYwLDYgKzc0LDkgQEAKIAl1OCAqYWJ1ZjsJCS8qIGFkZHIgYnVmZmVyICovCiB9OwogCisvKiBBbGxvdyBtc2VjIHRpbWVvdXQgcGVyIH5ieXRlIHRyYW5zZmVyICovCisjZGVmaW5lIEkyQ19USU1FT1VUIDEwCisKIC8qKgogICogd2FpdF9mb3JfY29tcGxldGlvbiAtIG1hbmFnZSB0aGUgYWN0dWFsIGkyYyB0cmFuc2ZlcgogICoJQG1zZzogdGhlIGkyYyBtc2cKQEAgLTY3LDggKzg0LDkgQEAKIHN0YXRpYyBpbnQgd2FpdF9mb3JfY29tcGxldGlvbihzdHJ1Y3QgaTJjX21zZyAqbXNnKQogewogCXVpbnQxNl90IGludF9zdGF0OworCXVsb25nIHRpbWViYXNlID0gZ2V0X3RpbWVyKDApOwogCi0Jd2hpbGUgKCFjdHJsYygpKSB7CisJZG8gewogCQlpbnRfc3RhdCA9IGJmaW5fcmVhZF9UV0lfSU5UX1NUQVQoKTsKIAogCQlpZiAoaW50X3N0YXQgJiBYTVRTRVJWKSB7CkBAIC0xMDMsNyArMTIxLDcgQEAKIAkJCWRlYnVnaSgicHJvY2Vzc2luZyBNRVJSIik7CiAJCQliZmluX3dyaXRlX1RXSV9JTlRfU1RBVChNRVJSKTsKIAkJCVNTWU5DKCk7Ci0JCQlicmVhazsKKwkJCXJldHVybiBtc2ctPmxlbjsKIAkJfQogCQlpZiAoaW50X3N0YXQgJiBNQ09NUCkgewogCQkJZGVidWdpKCJwcm9jZXNzaW5nIE1DT01QIik7CkBAIC0xMTYsNyArMTM0LDEyIEBACiAJCQl9IGVsc2UKIAkJCQlicmVhazsKIAkJfQotCX0KKworCQkvKiBJZiB3ZSB3ZXJlIGFibGUgdG8gZG8gc29tZXRoaW5nLCByZXNldCB0aW1lb3V0ICovCisJCWlmIChpbnRfc3RhdCkKKwkJCXRpbWViYXNlID0gZ2V0X3RpbWVyKDApOworCisJfSB3aGlsZSAoZ2V0X3RpbWVyKHRpbWViYXNlKSA8IEkyQ19USU1FT1VUKTsKIAogCXJldHVybiBtc2ctPmxlbjsKIH0KQEAgLTIwNCw3ICsyMjcsMzYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgorLyoqCisgKiBpMmNfc2V0X2J1c19zcGVlZCAtIHNldCBpMmMgYnVzIHNwZWVkCisgKglAc3BlZWQ6IGJ1cyBzcGVlZCAoaW4gSFopCisgKi8KK2ludCBpMmNfc2V0X2J1c19zcGVlZCh1bnNpZ25lZCBpbnQgc3BlZWQpCit7CisJdTE2IGNsa2RpdiA9IEkyQ19TUEVFRF9UT19EVVRZKHNwZWVkKTsKKworCS8qIFNldCBUV0kgaW50ZXJmYWNlIGNsb2NrICovCisJaWYgKGNsa2RpdiA8IEkyQ19EVVRZX01BWCB8fCBjbGtkaXYgPiBJMkNfRFVUWV9NSU4pCisJCXJldHVybiAtMTsKKwliZmluX3dyaXRlX1RXSV9DTEtESVYoKGNsa2RpdiA8PCA4KSB8IChjbGtkaXYgJiAweGZmKSk7CisKKwkvKiBEb24ndCB0dXJuIGl0IG9uICovCisJYmZpbl93cml0ZV9UV0lfTUFTVEVSX0NUTChzcGVlZCA+IDEwMDAwMCA/IEZBU1QgOiAwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGkyY19nZXRfYnVzX3NwZWVkIC0gZ2V0IGkyYyBidXMgc3BlZWQKKyAqCUBzcGVlZDogYnVzIHNwZWVkIChpbiBIWikKKyAqLwordW5zaWduZWQgaW50IGkyY19nZXRfYnVzX3NwZWVkKHZvaWQpCit7CisJLyogMTAgTUh6IC8gKDIgKiBDTEtESVYpIC0+IDUgTUh6IC8gQ0xLRElWICovCisJcmV0dXJuIDUwMDAwMDAgLyAoYmZpbl9yZWFkX1RXSV9DTEtESVYoKSAmIDB4ZmYpOworfQorCisvKioKICAqIGkyY19pbml0IC0gaW5pdGlhbGl6ZSB0aGUgaTJjIGJ1cwogICoJQHNwZWVkOiBidXMgc3BlZWQgKGluIEhaKQogICoJQHNsYXZlYWRkcjogYWRkcmVzcyBvZiBkZXZpY2UgaW4gc2xhdmUgbW9kZSAoMCAtIG5vdCBzbGF2ZSkKQEAgLTIyMCwxNSArMjcyLDkgQEAKIAliZmluX3dyaXRlX1RXSV9DT05UUk9MKHByZXNjYWxlKTsKIAogCS8qIFNldCBUV0kgaW50ZXJmYWNlIGNsb2NrIGFzIHNwZWNpZmllZCAqLwotCWJmaW5fd3JpdGVfVFdJX0NMS0RJVigKLQkJKCg1ICogMTAyNCAvIChzcGVlZCAvIDEwMDApKSA8PCA4KSB8Ci0JCSgoNSAqIDEwMjQgLyAoc3BlZWQgLyAxMDAwKSkgJiAweEZGKQotCSk7Ci0KLQkvKiBEb24ndCB0dXJuIGl0IG9uICovCi0JYmZpbl93cml0ZV9UV0lfTUFTVEVSX0NUTChzcGVlZCA+IDEwMDAwMCA/IEZBU1QgOiAwKTsKKwlpMmNfc2V0X2J1c19zcGVlZChzcGVlZCk7CiAKLQkvKiBCdXQgZW5hYmxlIGl0ICovCisJLyogRW5hYmxlIGl0ICovCiAJYmZpbl93cml0ZV9UV0lfQ09OVFJPTChUV0lfRU5BIHwgcHJlc2NhbGUpOwogCVNTWU5DKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL29tYXAyNHh4X2kyYy5jIGIvZHJpdmVycy9pMmMvb21hcDI0eHhfaTJjLmMKaW5kZXggMWE0YzhjOS4uZmYxODk5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvb21hcDI0eHhfaTJjLmMKKysrIGIvZHJpdmVycy9pMmMvb21hcDI0eHhfaTJjLmMKQEAgLTI5LDYgKzI5LDExIEBACiBzdGF0aWMgdTE2IHdhaXRfZm9yX3BpbiAodm9pZCk7CiBzdGF0aWMgdm9pZCBmbHVzaF9maWZvKHZvaWQpOwogCitzdGF0aWMgc3RydWN0IGkyYyAqaTJjX2Jhc2UgPSAoc3RydWN0IGkyYyAqKUkyQ19ERUZBVUxUX0JBU0U7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYnVzX2luaXRpYWxpemVkW0kyQ19CVVNfTUFYXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3VycmVudF9idXM7CisKIHZvaWQgaTJjX2luaXQgKGludCBzcGVlZCwgaW50IHNsYXZlYWRkKQogewogCWludCBwc2MsIGZzc2NsbCwgZnNzY2xoOwpAQCAtOTUsMzAgKzEwMCwzMiBAQAogCQlzY2xoID0gKHVuc2lnbmVkIGludClmc3NjbGg7CiAJfQogCi0Jd3JpdGV3KDB4MiwgSTJDX1NZU0MpOyAvKiBmb3IgRVMyIGFmdGVyIHNvZnQgcmVzZXQgKi8KKwl3cml0ZXcoMHgyLCAmaTJjX2Jhc2UtPnN5c2MpOyAvKiBmb3IgRVMyIGFmdGVyIHNvZnQgcmVzZXQgKi8KIAl1ZGVsYXkoMTAwMCk7Ci0Jd3JpdGV3KDB4MCwgSTJDX1NZU0MpOyAvKiB3aWxsIHByb2JhYmx5IHNlbGYgY2xlYXIgYnV0ICovCisJd3JpdGV3KDB4MCwgJmkyY19iYXNlLT5zeXNjKTsgLyogd2lsbCBwcm9iYWJseSBzZWxmIGNsZWFyIGJ1dCAqLwogCi0JaWYgKHJlYWR3IChJMkNfQ09OKSAmIEkyQ19DT05fRU4pIHsKLQkJd3JpdGV3ICgwLCBJMkNfQ09OKTsKKwlpZiAocmVhZHcgKCZpMmNfYmFzZS0+Y29uKSAmIEkyQ19DT05fRU4pIHsKKwkJd3JpdGV3ICgwLCAmaTJjX2Jhc2UtPmNvbik7CiAJCXVkZWxheSAoNTAwMDApOwogCX0KIAotCXdyaXRldyhwc2MsIEkyQ19QU0MpOwotCXdyaXRldyhzY2xsLCBJMkNfU0NMTCk7Ci0Jd3JpdGV3KHNjbGgsIEkyQ19TQ0xIKTsKKwl3cml0ZXcocHNjLCAmaTJjX2Jhc2UtPnBzYyk7CisJd3JpdGV3KHNjbGwsICZpMmNfYmFzZS0+c2NsbCk7CisJd3JpdGV3KHNjbGgsICZpMmNfYmFzZS0+c2NsaCk7CiAKIAkvKiBvd24gYWRkcmVzcyAqLwotCXdyaXRldyAoc2xhdmVhZGQsIEkyQ19PQSk7Ci0Jd3JpdGV3IChJMkNfQ09OX0VOLCBJMkNfQ09OKTsKKwl3cml0ZXcgKHNsYXZlYWRkLCAmaTJjX2Jhc2UtPm9hKTsKKwl3cml0ZXcgKEkyQ19DT05fRU4sICZpMmNfYmFzZS0+Y29uKTsKIAogCS8qIGhhdmUgdG8gZW5hYmxlIGludHJydXB0cyBvciBPTUFQIGkyYyBtb2R1bGUgZG9lc24ndCB3b3JrICovCiAJd3JpdGV3IChJMkNfSUVfWFJEWV9JRSB8IEkyQ19JRV9SUkRZX0lFIHwgSTJDX0lFX0FSRFlfSUUgfAotCQlJMkNfSUVfTkFDS19JRSB8IEkyQ19JRV9BTF9JRSwgSTJDX0lFKTsKKwkJSTJDX0lFX05BQ0tfSUUgfCBJMkNfSUVfQUxfSUUsICZpMmNfYmFzZS0+aWUpOwogCXVkZWxheSAoMTAwMCk7CiAJZmx1c2hfZmlmbygpOwotCXdyaXRldyAoMHhGRkZGLCBJMkNfU1RBVCk7Ci0Jd3JpdGV3ICgwLCBJMkNfQ05UKTsKKwl3cml0ZXcgKDB4RkZGRiwgJmkyY19iYXNlLT5zdGF0KTsKKwl3cml0ZXcgKDAsICZpMmNfYmFzZS0+Y250KTsKKworCWJ1c19pbml0aWFsaXplZFtjdXJyZW50X2J1c10gPSAxOwogfQogCiBzdGF0aWMgaW50IGkyY19yZWFkX2J5dGUgKHU4IGRldmFkZHIsIHU4IHJlZ29mZnNldCwgdTggKiB2YWx1ZSkKQEAgLTEzMCwxOSArMTM3LDE5IEBACiAJd2FpdF9mb3JfYmIgKCk7CiAKIAkvKiBvbmUgYnl0ZSBvbmx5ICovCi0Jd3JpdGV3ICgxLCBJMkNfQ05UKTsKKwl3cml0ZXcgKDEsICZpMmNfYmFzZS0+Y250KTsKIAkvKiBzZXQgc2xhdmUgYWRkcmVzcyAqLwotCXdyaXRldyAoZGV2YWRkciwgSTJDX1NBKTsKKwl3cml0ZXcgKGRldmFkZHIsICZpMmNfYmFzZS0+c2EpOwogCS8qIG5vIHN0b3AgYml0IG5lZWRlZCBoZXJlICovCi0Jd3JpdGV3IChJMkNfQ09OX0VOIHwgSTJDX0NPTl9NU1QgfCBJMkNfQ09OX1NUVCB8IEkyQ19DT05fVFJYLCBJMkNfQ09OKTsKKwl3cml0ZXcgKEkyQ19DT05fRU4gfCBJMkNfQ09OX01TVCB8IEkyQ19DT05fU1RUIHwgSTJDX0NPTl9UUlgsICZpMmNfYmFzZS0+Y29uKTsKIAogCXN0YXR1cyA9IHdhaXRfZm9yX3BpbiAoKTsKIAogCWlmIChzdGF0dXMgJiBJMkNfU1RBVF9YUkRZKSB7CiAJCS8qIEltcG9ydGFudDogaGF2ZSB0byB1c2UgYnl0ZSBhY2Nlc3MgKi8KLQkJd3JpdGViIChyZWdvZmZzZXQsIEkyQ19EQVRBKTsKKwkJd3JpdGViIChyZWdvZmZzZXQsICZpMmNfYmFzZS0+ZGF0YSk7CiAJCXVkZWxheSAoMjAwMDApOwotCQlpZiAocmVhZHcgKEkyQ19TVEFUKSAmIEkyQ19TVEFUX05BQ0spIHsKKwkJaWYgKHJlYWR3ICgmaTJjX2Jhc2UtPnN0YXQpICYgSTJDX1NUQVRfTkFDSykgewogCQkJaTJjX2Vycm9yID0gMTsKIAkJfQogCX0gZWxzZSB7CkBAIC0xNTEsMjggKzE1OCwyOCBAQAogCiAJaWYgKCFpMmNfZXJyb3IpIHsKIAkJLyogZnJlZSBidXMsIG90aGVyd2lzZSB3ZSBjYW4ndCB1c2UgYSBjb21iaW5lZCB0cmFuc2N0aW9uICovCi0JCXdyaXRldyAoMCwgSTJDX0NPTik7Ci0JCXdoaWxlIChyZWFkdyAoSTJDX1NUQVQpIHx8IChyZWFkdyAoSTJDX0NPTikgJiBJMkNfQ09OX01TVCkpIHsKKwkJd3JpdGV3ICgwLCAmaTJjX2Jhc2UtPmNvbik7CisJCXdoaWxlIChyZWFkdyAoJmkyY19iYXNlLT5zdGF0KSB8fCAocmVhZHcgKCZpMmNfYmFzZS0+Y29uKSAmIEkyQ19DT05fTVNUKSkgewogCQkJdWRlbGF5ICgxMDAwMCk7CiAJCQkvKiBIYXZlIHRvIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHRvIGNsZWFyIEkyQ19TVEFUICovCi0JCQl3cml0ZXcgKDB4RkZGRiwgSTJDX1NUQVQpOworCQkJd3JpdGV3ICgweEZGRkYsICZpMmNfYmFzZS0+c3RhdCk7CiAJCX0KIAogCQl3YWl0X2Zvcl9iYiAoKTsKIAkJLyogc2V0IHNsYXZlIGFkZHJlc3MgKi8KLQkJd3JpdGV3IChkZXZhZGRyLCBJMkNfU0EpOworCQl3cml0ZXcgKGRldmFkZHIsICZpMmNfYmFzZS0+c2EpOwogCQkvKiByZWFkIG9uZSBieXRlIGZyb20gc2xhdmUgKi8KLQkJd3JpdGV3ICgxLCBJMkNfQ05UKTsKKwkJd3JpdGV3ICgxLCAmaTJjX2Jhc2UtPmNudCk7CiAJCS8qIG5lZWQgc3RvcCBiaXQgaGVyZSAqLwogCQl3cml0ZXcgKEkyQ19DT05fRU4gfCBJMkNfQ09OX01TVCB8IEkyQ19DT05fU1RUIHwgSTJDX0NPTl9TVFAsCi0JCQlJMkNfQ09OKTsKKwkJCSZpMmNfYmFzZS0+Y29uKTsKIAogCQlzdGF0dXMgPSB3YWl0X2Zvcl9waW4gKCk7CiAJCWlmIChzdGF0dXMgJiBJMkNfU1RBVF9SUkRZKSB7CiAjaWYgZGVmaW5lZChDT05GSUdfT01BUDI0M1gpIHx8IGRlZmluZWQoQ09ORklHX09NQVAzNFhYKQotCQkJKnZhbHVlID0gcmVhZGIgKEkyQ19EQVRBKTsKKwkJCSp2YWx1ZSA9IHJlYWRiICgmaTJjX2Jhc2UtPmRhdGEpOwogI2Vsc2UKLQkJCSp2YWx1ZSA9IHJlYWR3IChJMkNfREFUQSk7CisJCQkqdmFsdWUgPSByZWFkdyAoJmkyY19iYXNlLT5kYXRhKTsKICNlbmRpZgogCQkJdWRlbGF5ICgyMDAwMCk7CiAJCX0gZWxzZSB7CkBAIC0xODAsMTcgKzE4NywxNyBAQAogCQl9CiAKIAkJaWYgKCFpMmNfZXJyb3IpIHsKLQkJCXdyaXRldyAoSTJDX0NPTl9FTiwgSTJDX0NPTik7Ci0JCQl3aGlsZSAocmVhZHcgKEkyQ19TVEFUKQotCQkJICAgICAgIHx8IChyZWFkdyAoSTJDX0NPTikgJiBJMkNfQ09OX01TVCkpIHsKKwkJCXdyaXRldyAoSTJDX0NPTl9FTiwgJmkyY19iYXNlLT5jb24pOworCQkJd2hpbGUgKHJlYWR3ICgmaTJjX2Jhc2UtPnN0YXQpCisJCQkgICAgICAgfHwgKHJlYWR3ICgmaTJjX2Jhc2UtPmNvbikgJiBJMkNfQ09OX01TVCkpIHsKIAkJCQl1ZGVsYXkgKDEwMDAwKTsKLQkJCQl3cml0ZXcgKDB4RkZGRiwgSTJDX1NUQVQpOworCQkJCXdyaXRldyAoMHhGRkZGLCAmaTJjX2Jhc2UtPnN0YXQpOwogCQkJfQogCQl9CiAJfQogCWZsdXNoX2ZpZm8oKTsKLQl3cml0ZXcgKDB4RkZGRiwgSTJDX1NUQVQpOwotCXdyaXRldyAoMCwgSTJDX0NOVCk7CisJd3JpdGV3ICgweEZGRkYsICZpMmNfYmFzZS0+c3RhdCk7CisJd3JpdGV3ICgwLCAmaTJjX2Jhc2UtPmNudCk7CiAJcmV0dXJuIGkyY19lcnJvcjsKIH0KIApAQCAtMjAzLDEyICsyMTAsMTIgQEAKIAl3YWl0X2Zvcl9iYiAoKTsKIAogCS8qIHR3byBieXRlcyAqLwotCXdyaXRldyAoMiwgSTJDX0NOVCk7CisJd3JpdGV3ICgyLCAmaTJjX2Jhc2UtPmNudCk7CiAJLyogc2V0IHNsYXZlIGFkZHJlc3MgKi8KLQl3cml0ZXcgKGRldmFkZHIsIEkyQ19TQSk7CisJd3JpdGV3IChkZXZhZGRyLCAmaTJjX2Jhc2UtPnNhKTsKIAkvKiBzdG9wIGJpdCBuZWVkZWQgaGVyZSAqLwogCXdyaXRldyAoSTJDX0NPTl9FTiB8IEkyQ19DT05fTVNUIHwgSTJDX0NPTl9TVFQgfCBJMkNfQ09OX1RSWCB8Ci0JCUkyQ19DT05fU1RQLCBJMkNfQ09OKTsKKwkJSTJDX0NPTl9TVFAsICZpMmNfYmFzZS0+Y29uKTsKIAogCS8qIHdhaXQgdW50aWwgc3RhdGUgY2hhbmdlICovCiAJc3RhdHVzID0gd2FpdF9mb3JfcGluICgpOwpAQCAtMjE2LDI0ICsyMjMsMjQgQEAKIAlpZiAoc3RhdHVzICYgSTJDX1NUQVRfWFJEWSkgewogI2lmIGRlZmluZWQoQ09ORklHX09NQVAyNDNYKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQMzRYWCkKIAkJLyogc2VuZCBvdXQgMSBieXRlICovCi0JCXdyaXRlYiAocmVnb2Zmc2V0LCBJMkNfREFUQSk7Ci0JCXdyaXRldyAoSTJDX1NUQVRfWFJEWSwgSTJDX1NUQVQpOworCQl3cml0ZWIgKHJlZ29mZnNldCwgJmkyY19iYXNlLT5kYXRhKTsKKwkJd3JpdGV3IChJMkNfU1RBVF9YUkRZLCAmaTJjX2Jhc2UtPnN0YXQpOwogCiAJCXN0YXR1cyA9IHdhaXRfZm9yX3BpbiAoKTsKIAkJaWYgKChzdGF0dXMgJiBJMkNfU1RBVF9YUkRZKSkgewogCQkJLyogc2VuZCBvdXQgbmV4dCAxIGJ5dGUgKi8KLQkJCXdyaXRlYiAodmFsdWUsIEkyQ19EQVRBKTsKLQkJCXdyaXRldyAoSTJDX1NUQVRfWFJEWSwgSTJDX1NUQVQpOworCQkJd3JpdGViICh2YWx1ZSwgJmkyY19iYXNlLT5kYXRhKTsKKwkJCXdyaXRldyAoSTJDX1NUQVRfWFJEWSwgJmkyY19iYXNlLT5zdGF0KTsKIAkJfSBlbHNlIHsKIAkJCWkyY19lcnJvciA9IDE7CiAJCX0KICNlbHNlCiAJCS8qIHNlbmQgb3V0IHR3byBieXRlcyAqLwotCQl3cml0ZXcgKCh2YWx1ZSA8PCA4KSArIHJlZ29mZnNldCwgSTJDX0RBVEEpOworCQl3cml0ZXcgKCh2YWx1ZSA8PCA4KSArIHJlZ29mZnNldCwgJmkyY19iYXNlLT5kYXRhKTsKICNlbmRpZgogCQkvKiBtdXN0IGhhdmUgZW5vdWdoIGRlbGF5IHRvIGFsbG93IEJCIGJpdCB0byBnbyBsb3cgKi8KIAkJdWRlbGF5ICg1MDAwMCk7Ci0JCWlmIChyZWFkdyAoSTJDX1NUQVQpICYgSTJDX1NUQVRfTkFDSykgeworCQlpZiAocmVhZHcgKCZpMmNfYmFzZS0+c3RhdCkgJiBJMkNfU1RBVF9OQUNLKSB7CiAJCQlpMmNfZXJyb3IgPSAxOwogCQl9CiAJfSBlbHNlIHsKQEAgLTI0MywxOCArMjUwLDE4IEBACiAJaWYgKCFpMmNfZXJyb3IpIHsKIAkJaW50IGVvdXQgPSAyMDA7CiAKLQkJd3JpdGV3IChJMkNfQ09OX0VOLCBJMkNfQ09OKTsKLQkJd2hpbGUgKChzdGF0ID0gcmVhZHcgKEkyQ19TVEFUKSkgfHwgKHJlYWR3IChJMkNfQ09OKSAmIEkyQ19DT05fTVNUKSkgeworCQl3cml0ZXcgKEkyQ19DT05fRU4sICZpMmNfYmFzZS0+Y29uKTsKKwkJd2hpbGUgKChzdGF0ID0gcmVhZHcgKCZpMmNfYmFzZS0+c3RhdCkpIHx8IChyZWFkdyAoJmkyY19iYXNlLT5jb24pICYgSTJDX0NPTl9NU1QpKSB7CiAJCQl1ZGVsYXkgKDEwMDApOwogCQkJLyogaGF2ZSB0byByZWFkIHRvIGNsZWFyIGludHJydXB0ICovCi0JCQl3cml0ZXcgKDB4RkZGRiwgSTJDX1NUQVQpOworCQkJd3JpdGV3ICgweEZGRkYsICZpMmNfYmFzZS0+c3RhdCk7CiAJCQlpZigtLWVvdXQgPT0gMCkgLyogYmV0dGVyIGxlYXZlIHdpdGggZXJyb3IgdGhhbiBoYW5nICovCiAJCQkJYnJlYWs7CiAJCX0KIAl9CiAJZmx1c2hfZmlmbygpOwotCXdyaXRldyAoMHhGRkZGLCBJMkNfU1RBVCk7Ci0Jd3JpdGV3ICgwLCBJMkNfQ05UKTsKKwl3cml0ZXcgKDB4RkZGRiwgJmkyY19iYXNlLT5zdGF0KTsKKwl3cml0ZXcgKDAsICZpMmNfYmFzZS0+Y250KTsKIAlyZXR1cm4gaTJjX2Vycm9yOwogfQogCkBAIC0yNjUsMTQgKzI3MiwxNCBAQAogCSAqIHlvdSBnZXQgYSBidXMgZXJyb3IKIAkgKi8KIAl3aGlsZSgxKXsKLQkJc3RhdCA9IHJlYWR3KEkyQ19TVEFUKTsKKwkJc3RhdCA9IHJlYWR3KCZpMmNfYmFzZS0+c3RhdCk7CiAJCWlmKHN0YXQgPT0gSTJDX1NUQVRfUlJEWSl7CiAjaWYgZGVmaW5lZChDT05GSUdfT01BUDI0M1gpIHx8IGRlZmluZWQoQ09ORklHX09NQVAzNFhYKQotCQkJcmVhZGIoSTJDX0RBVEEpOworCQkJcmVhZGIoJmkyY19iYXNlLT5kYXRhKTsKICNlbHNlCi0JCQlyZWFkdyhJMkNfREFUQSk7CisJCQlyZWFkdygmaTJjX2Jhc2UtPmRhdGEpOwogI2VuZGlmCi0JCQl3cml0ZXcoSTJDX1NUQVRfUlJEWSxJMkNfU1RBVCk7CisJCQl3cml0ZXcoSTJDX1NUQVRfUlJEWSwmaTJjX2Jhc2UtPnN0YXQpOwogCQkJdWRlbGF5KDEwMDApOwogCQl9ZWxzZQogCQkJYnJlYWs7CkBAIC0yODMsNyArMjkwLDcgQEAKIHsKIAlpbnQgcmVzID0gMTsgLyogZGVmYXVsdCA9IGZhaWwgKi8KIAotCWlmIChjaGlwID09IHJlYWR3IChJMkNfT0EpKSB7CisJaWYgKGNoaXAgPT0gcmVhZHcgKCZpMmNfYmFzZS0+b2EpKSB7CiAJCXJldHVybiByZXM7CiAJfQogCkBAIC0yOTEsMjcgKzI5OCwyNyBAQAogCXdhaXRfZm9yX2JiICgpOwogCiAJLyogdHJ5IHRvIHJlYWQgb25lIGJ5dGUgKi8KLQl3cml0ZXcgKDEsIEkyQ19DTlQpOworCXdyaXRldyAoMSwgJmkyY19iYXNlLT5jbnQpOwogCS8qIHNldCBzbGF2ZSBhZGRyZXNzICovCi0Jd3JpdGV3IChjaGlwLCBJMkNfU0EpOworCXdyaXRldyAoY2hpcCwgJmkyY19iYXNlLT5zYSk7CiAJLyogc3RvcCBiaXQgbmVlZGVkIGhlcmUgKi8KLQl3cml0ZXcgKEkyQ19DT05fRU4gfCBJMkNfQ09OX01TVCB8IEkyQ19DT05fU1RUIHwgSTJDX0NPTl9TVFAsIEkyQ19DT04pOworCXdyaXRldyAoSTJDX0NPTl9FTiB8IEkyQ19DT05fTVNUIHwgSTJDX0NPTl9TVFQgfCBJMkNfQ09OX1NUUCwgJmkyY19iYXNlLT5jb24pOwogCS8qIGVub3VnaCBkZWxheSBmb3IgdGhlIE5BQ0sgYml0IHNldCAqLwogCXVkZWxheSAoNTAwMDApOwogCi0JaWYgKCEocmVhZHcgKEkyQ19TVEFUKSAmIEkyQ19TVEFUX05BQ0spKSB7CisJaWYgKCEocmVhZHcgKCZpMmNfYmFzZS0+c3RhdCkgJiBJMkNfU1RBVF9OQUNLKSkgewogCQlyZXMgPSAwOyAgICAgIC8qIHN1Y2Nlc3MgY2FzZSAqLwogCQlmbHVzaF9maWZvKCk7Ci0JCXdyaXRldygweEZGRkYsIEkyQ19TVEFUKTsKKwkJd3JpdGV3KDB4RkZGRiwgJmkyY19iYXNlLT5zdGF0KTsKIAl9IGVsc2UgewotCQl3cml0ZXcoMHhGRkZGLCBJMkNfU1RBVCk7CSAvKiBmYWlsdWUsIGNsZWFyIHNvdXJjZXMqLwotCQl3cml0ZXcgKHJlYWR3IChJMkNfQ09OKSB8IEkyQ19DT05fU1RQLCBJMkNfQ09OKTsgLyogZmluaXNoIHVwIHhmZXIgKi8KKwkJd3JpdGV3KDB4RkZGRiwgJmkyY19iYXNlLT5zdGF0KTsJIC8qIGZhaWx1ZSwgY2xlYXIgc291cmNlcyovCisJCXdyaXRldyAocmVhZHcgKCZpMmNfYmFzZS0+Y29uKSB8IEkyQ19DT05fU1RQLCAmaTJjX2Jhc2UtPmNvbik7IC8qIGZpbmlzaCB1cCB4ZmVyICovCiAJCXVkZWxheSgyMDAwMCk7CiAJCXdhaXRfZm9yX2JiICgpOwogCX0KIAlmbHVzaF9maWZvKCk7Ci0Jd3JpdGV3ICgwLCBJMkNfQ05UKTsgLyogZG9uJ3QgYWxsb3cgYW55IG1vcmUgZGF0YSBpbi4uLndlIGRvbid0IHdhbnQgaXQuKi8KLQl3cml0ZXcoMHhGRkZGLCBJMkNfU1RBVCk7CisJd3JpdGV3ICgwLCAmaTJjX2Jhc2UtPmNudCk7IC8qIGRvbid0IGFsbG93IGFueSBtb3JlIGRhdGEgaW4uLi53ZSBkb24ndCB3YW50IGl0LiovCisJd3JpdGV3KDB4RkZGRiwgJmkyY19iYXNlLT5zdGF0KTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0zNzAsMTcgKzM3NywxNyBAQAogCWludCB0aW1lb3V0ID0gMTA7CiAJdTE2IHN0YXQ7CiAKLQl3cml0ZXcoMHhGRkZGLCBJMkNfU1RBVCk7CSAvKiBjbGVhciBjdXJyZW50IGludGVycnV0cy4uLiovCi0Jd2hpbGUgKChzdGF0ID0gcmVhZHcgKEkyQ19TVEFUKSAmIEkyQ19TVEFUX0JCKSAmJiB0aW1lb3V0LS0pIHsKLQkJd3JpdGV3IChzdGF0LCBJMkNfU1RBVCk7CisJd3JpdGV3KDB4RkZGRiwgJmkyY19iYXNlLT5zdGF0KTsJIC8qIGNsZWFyIGN1cnJlbnQgaW50ZXJydXRzLi4uKi8KKwl3aGlsZSAoKHN0YXQgPSByZWFkdyAoJmkyY19iYXNlLT5zdGF0KSAmIEkyQ19TVEFUX0JCKSAmJiB0aW1lb3V0LS0pIHsKKwkJd3JpdGV3IChzdGF0LCAmaTJjX2Jhc2UtPnN0YXQpOwogCQl1ZGVsYXkgKDUwMDAwKTsKIAl9CiAKIAlpZiAodGltZW91dCA8PSAwKSB7CiAJCXByaW50ZiAoInRpbWVkIG91dCBpbiB3YWl0X2Zvcl9iYjogSTJDX1NUQVQ9JXhcbiIsCi0JCQlyZWFkdyAoSTJDX1NUQVQpKTsKKwkJCXJlYWR3ICgmaTJjX2Jhc2UtPnN0YXQpKTsKIAl9Ci0Jd3JpdGV3KDB4RkZGRiwgSTJDX1NUQVQpOwkgLyogY2xlYXIgZGVsYXllZCBzdHVmZiovCisJd3JpdGV3KDB4RkZGRiwgJmkyY19iYXNlLT5zdGF0KTsJIC8qIGNsZWFyIGRlbGF5ZWQgc3R1ZmYqLwogfQogCiBzdGF0aWMgdTE2IHdhaXRfZm9yX3BpbiAodm9pZCkKQEAgLTM5MCw3ICszOTcsNyBAQAogCiAJZG8gewogCQl1ZGVsYXkgKDEwMDApOwotCQlzdGF0dXMgPSByZWFkdyAoSTJDX1NUQVQpOworCQlzdGF0dXMgPSByZWFkdyAoJmkyY19iYXNlLT5zdGF0KTsKIAl9IHdoaWxlICggICEoc3RhdHVzICYKIAkJICAgKEkyQ19TVEFUX1JPVlIgfCBJMkNfU1RBVF9YVURGIHwgSTJDX1NUQVRfWFJEWSB8CiAJCSAgICBJMkNfU1RBVF9SUkRZIHwgSTJDX1NUQVRfQVJEWSB8IEkyQ19TVEFUX05BQ0sgfApAQCAtMzk4LDggKzQwNSwzMyBAQAogCiAJaWYgKHRpbWVvdXQgPD0gMCkgewogCQlwcmludGYgKCJ0aW1lZCBvdXQgaW4gd2FpdF9mb3JfcGluOiBJMkNfU1RBVD0leFxuIiwKLQkJCXJlYWR3IChJMkNfU1RBVCkpOwotCQkJd3JpdGV3KDB4RkZGRiwgSTJDX1NUQVQpOworCQkJcmVhZHcgKCZpMmNfYmFzZS0+c3RhdCkpOworCQkJd3JpdGV3KDB4RkZGRiwgJmkyY19iYXNlLT5zdGF0KTsKIH0KIAlyZXR1cm4gc3RhdHVzOwogfQorCitpbnQgaTJjX3NldF9idXNfbnVtKHVuc2lnbmVkIGludCBidXMpCit7CisJaWYgKChidXMgPCAwKSB8fCAoYnVzID49IEkyQ19CVVNfTUFYKSkgeworCQlwcmludGYoIkJhZCBidXM6ICVkXG4iLCBidXMpOworCQlyZXR1cm4gLTE7CisJfQorCisjaWYgSTJDX0JVU19NQVg9PTMKKwlpZiAoYnVzID09IDIpCisJCWkyY19iYXNlID0gKHN0cnVjdCBpMmMgKilJMkNfQkFTRTM7CisJZWxzZQorI2VuZGlmCisJaWYgKGJ1cyA9PSAxKQorCQlpMmNfYmFzZSA9IChzdHJ1Y3QgaTJjICopSTJDX0JBU0UyOworCWVsc2UKKwkJaTJjX2Jhc2UgPSAoc3RydWN0IGkyYyAqKUkyQ19CQVNFMTsKKworCWN1cnJlbnRfYnVzID0gYnVzOworCisJaWYoIWJ1c19pbml0aWFsaXplZFtjdXJyZW50X2J1c10pCisJCWkyY19pbml0KENPTkZJR19TWVNfSTJDX1NQRUVELCBDT05GSUdfU1lTX0kyQ19TTEFWRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL3BjYTk1NjRfaTJjLmMgYi9kcml2ZXJzL2kyYy9wY2E5NTY0X2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OWE5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9wY2E5NTY0X2kyYy5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogRmlsZTogICAgICAgICBkcml2ZXJzL2kyYy9wY2E5NTY0LmMKKyAqIEJhc2VkIG9uOiAgICAgZHJpdmVycy9pMmMvczNjNDRiMF9pMmMuYworICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6ICAgICAgMjAwOS0wNi0yMworICogRGVzY3JpcHRpb246ICBQQ0E5NTY0IGkyYyBicmlkZ2UgZHJpdmVyCisgKgorICogTW9kaWZpZWQ6CisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA5IENKU0MgIk5JSSBTVFQiLCBodHRwOi8vd3d3Lm5paXN0dC5ydS8KKyAqCisgKiBCdWdzOgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCisgKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8aTJjLmg+CisjaW5jbHVkZSA8cGNhOTU2NC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIFBDQV9TVEEJCQkoQ09ORklHX1BDQTk1NjRfQkFTRSArIDApCisjZGVmaW5lIFBDQV9UTwkJCShDT05GSUdfUENBOTU2NF9CQVNFICsgMCkKKyNkZWZpbmUgUENBX0RBVAkJCShDT05GSUdfUENBOTU2NF9CQVNFICsgKDEgPDwgMikpCisjZGVmaW5lIFBDQV9BRFIJCQkoQ09ORklHX1BDQTk1NjRfQkFTRSArICgyIDw8IDIpKQorI2RlZmluZSBQQ0FfQ09OCQkJKENPTkZJR19QQ0E5NTY0X0JBU0UgKyAoMyA8PCAyKSkKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcGNhX3JlYWRfcmVnKHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRiKCh2b2lkICopcmVnKTsKK30KKworc3RhdGljIHZvaWQgcGNhX3dyaXRlX3JlZyh1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBjaGFyIHZhbHVlKQoreworCXdyaXRlYih2YWx1ZSwgKHZvaWQgKilyZWcpOworfQorCitzdGF0aWMgaW50IHBjYV93YWl0X2J1c3kodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IDEwMDAwOworCisJd2hpbGUgKCEocGNhX3JlYWRfcmVnKFBDQV9DT04pICYgUENBX0NPTl9TSSkgJiYgLS10aW1lb3V0KQorCQl1ZGVsYXkoMSk7CisKKwlpZiAodGltZW91dCA9PSAwKQorCQlkZWJ1ZygiSTJDIHRpbWVvdXQhXG4iKTsKKworCWRlYnVnKCJDT04gPSAweCUwMngsIFNUQSA9IDB4JTAyeFxuIiwgcGNhX3JlYWRfcmVnKFBDQV9DT04pLAorCSAgICAgICBwY2FfcmVhZF9yZWcoUENBX1NUQSkpOworCisJcmV0dXJuIHRpbWVvdXQgPyAwIDogMTsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljIEZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJbml0aWFsaXphdGlvbgorICovCit2b2lkIGkyY19pbml0KGludCBzcGVlZCwgaW50IHNsYXZlYWRkcikKK3sKKwlwY2Ffd3JpdGVfcmVnKFBDQV9DT04sIFBDQV9DT05fRU5TSU8gfCBzcGVlZCk7Cit9CisKKy8qCisgKiBQcm9iZSB0aGUgZ2l2ZW4gSTJDIGNoaXAgYWRkcmVzcy4gIFJldHVybnMgMCBpZiBhIGNoaXAgcmVzcG9uZGVkLAorICogbm90IDAgb24gZmFpbHVyZS4KKyAqLworCitpbnQgaTJjX3Byb2JlKHVjaGFyIGNoaXApCit7CisJdW5zaWduZWQgY2hhciByZXM7CisKKwlwY2Ffd3JpdGVfcmVnKFBDQV9DT04sIFBDQV9DT05fU1RBIHwgUENBX0NPTl9FTlNJTyk7CisJcGNhX3dhaXRfYnVzeSgpOworCisJcGNhX3dyaXRlX3JlZyhQQ0FfQ09OLCBQQ0FfQ09OX1NUQSB8IFBDQV9DT05fRU5TSU8pOworCisJcGNhX3dyaXRlX3JlZyhQQ0FfREFULCAoY2hpcCA8PCAxKSB8IDEpOworCXJlcyA9IHBjYV93YWl0X2J1c3koKTsKKworCWlmICgocmVzID09IDApICYmIChwY2FfcmVhZF9yZWcoUENBX1NUQSkgPT0gMHg0OCkpCisJCXJlcyA9IDE7CisKKwlwY2Ffd3JpdGVfcmVnKFBDQV9DT04sIFBDQV9DT05fU1RPIHwgUENBX0NPTl9FTlNJTyk7CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogUmVhZC9Xcml0ZSBpbnRlcmZhY2U6CisgKiAgIGNoaXA6ICAgIEkyQyBjaGlwIGFkZHJlc3MsIHJhbmdlIDAuLjEyNworICogICBhZGRyOiAgICBNZW1vcnkgKHJlZ2lzdGVyKSBhZGRyZXNzIHdpdGhpbiB0aGUgY2hpcAorICogICBhbGVuOiAgICBOdW1iZXIgb2YgYnl0ZXMgdG8gdXNlIGZvciBhZGRyICh0eXBpY2FsbHkgMSwgMiBmb3IgbGFyZ2VyCisgKiAgICAgICAgICAgICAgbWVtb3JpZXMsIDAgZm9yIHJlZ2lzdGVyIHR5cGUgZGV2aWNlcyB3aXRoIG9ubHkgb25lCisgKiAgICAgICAgICAgICAgcmVnaXN0ZXIpCisgKiAgIGJ1ZmZlcjogIFdoZXJlIHRvIHJlYWQvd3JpdGUgdGhlIGRhdGEKKyAqICAgbGVuOiAgICAgSG93IG1hbnkgYnl0ZXMgdG8gcmVhZC93cml0ZQorICoKKyAqICAgUmV0dXJuczogMCBvbiBzdWNjZXNzLCBub3QgMCBvbiBmYWlsdXJlCisgKi8KK2ludCBpMmNfcmVhZCh1Y2hhciBjaGlwLCB1aW50IGFkZHIsIGludCBhbGVuLCB1Y2hhciAqYnVmZmVyLCBpbnQgbGVuKQoreworCWludCBpOworCisJcGNhX3dyaXRlX3JlZyhQQ0FfQ09OLCBQQ0FfQ09OX0VOU0lPIHwgUENBX0NPTl9TVEEpOworCXBjYV93YWl0X2J1c3koKTsKKworCXBjYV93cml0ZV9yZWcoUENBX0NPTiwgUENBX0NPTl9FTlNJTyk7CisKKwlwY2Ffd3JpdGVfcmVnKFBDQV9EQVQsIChjaGlwIDw8IDEpKTsKKwlwY2Ffd2FpdF9idXN5KCk7CisJcGNhX3dyaXRlX3JlZyhQQ0FfQ09OLCBQQ0FfQ09OX0VOU0lPKTsKKworCWlmIChhbGVuID4gMCkgeworCQlwY2Ffd3JpdGVfcmVnKFBDQV9EQVQsIGFkZHIpOworCQlwY2Ffd2FpdF9idXN5KCk7CisJCXBjYV93cml0ZV9yZWcoUENBX0NPTiwgUENBX0NPTl9FTlNJTyk7CisJfQorCisJcGNhX3dyaXRlX3JlZyhQQ0FfQ09OLCBQQ0FfQ09OX0VOU0lPIHwgUENBX0NPTl9TVE8pOworCisJdWRlbGF5KDUwMCk7CisKKwlwY2Ffd3JpdGVfcmVnKFBDQV9DT04sIFBDQV9DT05fRU5TSU8gfCBQQ0FfQ09OX1NUQSk7CisJcGNhX3dhaXRfYnVzeSgpOworCXBjYV93cml0ZV9yZWcoUENBX0NPTiwgUENBX0NPTl9FTlNJTyk7CisKKwlwY2Ffd3JpdGVfcmVnKFBDQV9EQVQsIChjaGlwIDw8IDEpIHwgMSk7CisJcGNhX3dhaXRfYnVzeSgpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisJCWlmIChpID09IGxlbiAtIDEpCisJCQlwY2Ffd3JpdGVfcmVnKFBDQV9DT04sIFBDQV9DT05fRU5TSU8pOworCQllbHNlCisJCQlwY2Ffd3JpdGVfcmVnKFBDQV9DT04sIFBDQV9DT05fRU5TSU8gfCBQQ0FfQ09OX0FBKTsKKworCQlwY2Ffd2FpdF9idXN5KCk7CisJCWJ1ZmZlcltpXSA9IHBjYV9yZWFkX3JlZyhQQ0FfREFUKTsKKworCX0KKworCXBjYV93cml0ZV9yZWcoUENBX0NPTiwgUENBX0NPTl9FTlNJTyB8IFBDQV9DT05fU1RPKTsKKworCXJldHVybiAwOworfQorCitpbnQgaTJjX3dyaXRlKHVjaGFyIGNoaXAsIHVpbnQgYWRkciwgaW50IGFsZW4sIHVjaGFyICpidWZmZXIsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlwY2Ffd3JpdGVfcmVnKFBDQV9DT04sIFBDQV9DT05fRU5TSU8gfCBQQ0FfQ09OX1NUQSk7CisJcGNhX3dhaXRfYnVzeSgpOworCXBjYV93cml0ZV9yZWcoUENBX0NPTiwgUENBX0NPTl9FTlNJTyk7CisKKwlwY2Ffd3JpdGVfcmVnKFBDQV9EQVQsIGNoaXAgPDwgMSk7CisJcGNhX3dhaXRfYnVzeSgpOworCXBjYV93cml0ZV9yZWcoUENBX0NPTiwgUENBX0NPTl9FTlNJTyk7CisKKwlpZiAoYWxlbiA+IDApIHsKKwkJcGNhX3dyaXRlX3JlZyhQQ0FfREFULCBhZGRyKTsKKwkJcGNhX3dhaXRfYnVzeSgpOworCQlwY2Ffd3JpdGVfcmVnKFBDQV9DT04sIFBDQV9DT05fRU5TSU8pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworCQlwY2Ffd3JpdGVfcmVnKFBDQV9EQVQsIGJ1ZmZlcltpXSk7CisJCXBjYV93YWl0X2J1c3koKTsKKwkJcGNhX3dyaXRlX3JlZyhQQ0FfQ09OLCBQQ0FfQ09OX0VOU0lPKTsKKwl9CisKKwlwY2Ffd3JpdGVfcmVnKFBDQV9DT04sIFBDQV9DT05fU1RPIHwgUENBX0NPTl9FTlNJTyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL3MzYzI0eDBfaTJjLmMgYi9kcml2ZXJzL2kyYy9zM2MyNHgwX2kyYy5jCmluZGV4IDU1YzZhMTIuLmM4MzcxY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL3MzYzI0eDBfaTJjLmMKKysrIGIvZHJpdmVycy9pMmMvczNjMjR4MF9pMmMuYwpAQCAtMjcsMTEgKzI3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkKLSNpbmNsdWRlIDxzM2MyNDAwLmg+Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQotI2luY2x1ZGUgPHMzYzI0MTAuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxpMmMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL3NvZnRfaTJjLmMgYi9kcml2ZXJzL2kyYy9zb2Z0X2kyYy5jCmluZGV4IDU5ODgzYTUuLjlhNDg3ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL3NvZnRfaTJjLmMKKysrIGIvZHJpdmVycy9pMmMvc29mdF9pMmMuYwpAQCAtMzQsNiArMzQsMTEgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FUOTFTQU05MjYzCQkvKiBvbmx5IHZhbGlkIGZvciBBVDkxU0FNOTI2MyAqLworI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfcG1jLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CisjZW5kaWYKICNpZmRlZglDT05GSUdfSVhQNDI1CQkJLyogb25seSB2YWxpZCBmb3IgSVhQNDI1ICovCiAjaW5jbHVkZSA8YXNtL2FyY2gvaXhwNDI1Lmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL29tYXAzX21tYy5jIGIvZHJpdmVycy9tbWMvb21hcDNfbW1jLmMKaW5kZXggNTEzZGQyNS4uOTZjMGU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvb21hcDNfbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvb21hcDNfbW1jLmMKQEAgLTYzLDcgKzYzLDkgQEAKIHsKIAl0Ml90ICp0Ml9iYXNlID0gKHQyX3QgKilUMl9CQVNFOwogCisjaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9QT1dFUikKIAl0d2w0MDMwX3Bvd2VyX21tY19pbml0KCk7CisjZW5kaWYKIAogCXdyaXRlbChyZWFkbCgmdDJfYmFzZS0+cGJpYXNfbGl0ZSkgfCBQQklBU0xJVEVQV1JETloxIHwKIAkJUEJJQVNTUEVFRENUUkwwIHwgUEJJQVNMSVRFUFdSRE5aMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZGF2aW5jaV9uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2RhdmluY2lfbmFuZC5jCmluZGV4IGVhYmFmM2UuLjQxYTk1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZGF2aW5jaV9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9kYXZpbmNpX25hbmQuYwpAQCAtMTgyLDEzICsxODIsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NZU19OQU5EXzRCSVRfSFdfRUNDX09PQkZJUlNUCiBzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG5hbmRfZGF2aW5jaV80Yml0X2xheW91dF9vb2JmaXJzdCA9IHsKLS8qCi0gKiBUSSB1c2VzIGEgZGlmZmVyZW50IGxheW91dCBmb3IgNEsgcGFnZSBkZXZpZWNzLiBTaW5jZSB0aGUKLSAqIGVjY3BvcyBmaWxlZCBjYW4gaG9sZCBvbmx5IGEgbGltaXRlZCBudW1iZXIgb2YgZW50cmllcywgYWRkaW5nCi0gKiBzdXBwb3J0IGZvciA0SyBwYWdlIHdpbGwgcmVzdWx0IGluIGNvbXBpbGF0aW9uIHdhcm5pbmdzCi0gKiA0SyBTdXBwb3J0IHdpbGwgYmUgYWRkZWQgbGF0ZXIKLSAqLwotI2lmZGVmIENPTkZJR19TWVNfTkFORF9QQUdFXzJLCisjaWYgZGVmaW5lZChDT05GSUdfU1lTX05BTkRfUEFHRV8ySykKIAkuZWNjYnl0ZXMgPSA0MCwKIAkuZWNjcG9zID0gewogCQkyNCwgMjUsIDI2LCAyNywgMjgsCkBAIC0yMDAsNiArMTk0LDIxIEBACiAJLm9vYmZyZWUgPSB7CiAJCXsub2Zmc2V0ID0gMiwgLmxlbmd0aCA9IDIyLCB9LAogCX0sCisjZWxpZiBkZWZpbmVkKENPTkZJR19TWVNfTkFORF9QQUdFXzRLKQorCS5lY2NieXRlcyA9IDgwLAorCS5lY2Nwb3MgPSB7CisJCTQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LAorCQk1OCwgNTksIDYwLCA2MSwgNjIsIDYzLAk2NCwgNjUsIDY2LCA2NywKKwkJNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsCisJCTc4LCA3OSwJODAsIDgxLCA4MiwgODMsCTg0LCA4NSwgODYsIDg3LAorCQk4OCwgODksIDkwLCA5MSwgOTIsIDkzLAk5NCwgOTUsIDk2LCA5NywKKwkJOTgsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywKKwkJMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LAorCQkxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsCisJCX0sCisJLm9vYmZyZWUgPSB7CisJCXsub2Zmc2V0ID0gMiwgLmxlbmd0aCA9IDQ2LCB9LAorCX0sCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZnNsX2VsYmNfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMKaW5kZXggNTBjYjRhYS4uMTQ2ZTliZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9mc2xfZWxiY19uYW5kLmMKQEAgLTc2Niw5ICs3NjYsNiBAQAogCW5hbmQtPndhaXRmdW5jID0gZnNsX2VsYmNfd2FpdDsKIAogCS8qIHNldCB1cCBuYW5kIG9wdGlvbnMgKi8KLQkvKiByZWRpcmVjdCB0aGUgcG9pbnRlciBvZiBiYnQgcGF0dGVybiB0byBSQU0gKi8KLQliYnRfbWFpbl9kZXNjci5wYXR0ZXJuID0gYmJ0X3BhdHRlcm47Ci0JYmJ0X21pcnJvcl9kZXNjci5wYXR0ZXJuID0gbWlycm9yX3BhdHRlcm47CiAJbmFuZC0+YmJ0X3RkID0gJmJidF9tYWluX2Rlc2NyOwogCW5hbmQtPmJidF9tZCA9ICZiYnRfbWlycm9yX2Rlc2NyOwogCkBAIC04MTUsNyArODEyLDYgQEAKIAkvKiBMYXJnZS1wYWdlLXNwZWNpZmljIHNldHVwICovCiAJaWYgKG9yICYgT1JfRkNNX1BHUykgewogCQlwcml2LT5wYWdlX3NpemUgPSAxOwotCQlsYXJnZXBhZ2VfbWVtb3J5YmFzZWQucGF0dGVybiA9IHNjYW5fZmZfcGF0dGVybjsKIAkJbmFuZC0+YmFkYmxvY2tfcGF0dGVybiA9ICZsYXJnZXBhZ2VfbWVtb3J5YmFzZWQ7CiAKIAkJLyogYWRqdXN0IGVjYyBzZXR1cCBpZiBuZWVkZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IDQyNmJiOTUuLjcxNzFiZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtODkzLDYgKzg5Myw5IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCisgKgorICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMsIHdoaWNoIHVzZSBhIHNwZWNpYWwgb29iIGxheW91dAogICovCiBzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKIAkJCSAgICAgIHVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpCkBAIC05MDMsMTAgKzkwNiw1MyBAQAogfQogCiAvKioKKyAqIG5hbmRfcmVhZF9wYWdlX3Jhd19zeW5kcm9tZSAtIFtJbnRlcm5dIHJlYWQgcmF3IHBhZ2UgZGF0YSB3aXRob3V0IGVjYworICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAorICoKKyAqIFdlIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQgYW5kIGhhbmRsaW5nIGV2ZW4gd2hlbiBPT0IgaXNuJ3QgdXNlZC4KKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfcGFnZV9yYXdfc3luZHJvbWUoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkgICAgICB1aW50OF90ICpidWYsIGludCBwYWdlKQoreworCWludCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCXVpbnQ4X3QgKm9vYiA9IGNoaXAtPm9vYl9wb2k7CisJaW50IHN0ZXBzLCBzaXplOworCisJZm9yIChzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsgc3RlcHMgPiAwOyBzdGVwcy0tKSB7CisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgYnVmLCBlY2NzaXplKTsKKwkJYnVmICs9IGVjY3NpemU7CisKKwkJaWYgKGNoaXAtPmVjYy5wcmVwYWQpIHsKKwkJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBjaGlwLT5lY2MucHJlcGFkKTsKKwkJCW9vYiArPSBjaGlwLT5lY2MucHJlcGFkOworCQl9CisKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBvb2IsIGVjY2J5dGVzKTsKKwkJb29iICs9IGVjY2J5dGVzOworCisJCWlmIChjaGlwLT5lY2MucG9zdHBhZCkgeworCQkJY2hpcC0+cmVhZF9idWYobXRkLCBvb2IsIGNoaXAtPmVjYy5wb3N0cGFkKTsKKwkJCW9vYiArPSBjaGlwLT5lY2MucG9zdHBhZDsKKwkJfQorCX0KKworCXNpemUgPSBtdGQtPm9vYnNpemUgLSAob29iIC0gY2hpcC0+b29iX3BvaSk7CisJaWYgKHNpemUpCisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBzaXplKTsKKworCXJldHVybiAwOworfQorCisvKioKICAqIG5hbmRfcmVhZF9wYWdlX3N3ZWNjIC0gW1JFUExBQ0FCTEVdIHNvZnR3YXJlIGVjYyBiYXNlZCBwYWdlIHJlYWQgZnVuY3Rpb24KICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqLwogc3RhdGljIGludCBuYW5kX3JlYWRfcGFnZV9zd2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKIAkJCQl1aW50OF90ICpidWYsIGludCBwYWdlKQpAQCAtOTQ2LDkgKzk5Miw5IEBACiAgKiBuYW5kX3JlYWRfc3VicGFnZSAtIFtSRVBMQUNBQkxFXSBzb2Z0d2FyZSBlY2MgYmFzZWQgc3ViLXBhZ2UgcmVhZCBmdW5jdGlvbgogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCi0gKiBAZGF0YW9mcwlvZmZzZXQgb2YgcmVxdWVzdGVkIGRhdGEgd2l0aGluIHRoZSBwYWdlCi0gKiBAcmVhZGxlbglkYXRhIGxlbmd0aAotICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQGRhdGFfb2ZmczoJb2Zmc2V0IG9mIHJlcXVlc3RlZCBkYXRhIHdpdGhpbiB0aGUgcGFnZQorICogQHJlYWRsZW46CWRhdGEgbGVuZ3RoCisgKiBAYnVmcG9pOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCiAgKi8KIHN0YXRpYyBpbnQgbmFuZF9yZWFkX3N1YnBhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQzMl90IGRhdGFfb2ZmcywgdWludDMyX3QgcmVhZGxlbiwgdWludDhfdCAqYnVmcG9pKQogewpAQCAtMTAxNSw3ICsxMDYxLDcgQEAKIAkJaW50IHN0YXQ7CiAKIAkJc3RhdCA9IGNoaXAtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmNoaXAtPmJ1ZmZlcnMtPmVjY2NvZGVbaV0sICZjaGlwLT5idWZmZXJzLT5lY2NjYWxjW2ldKTsKLQkJaWYgKHN0YXQgPCAwKQorCQlpZiAoc3RhdCA9PSAtMSkKIAkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOwogCQllbHNlCiAJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gc3RhdDsKQEAgLTEwMjgsNiArMTA3NCw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMgd2hpY2ggbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dAogICovCkBAIC0xMDU5LDcgKzExMDYsNyBAQAogCQlpbnQgc3RhdDsKIAogCQlzdGF0ID0gY2hpcC0+ZWNjLmNvcnJlY3QobXRkLCBwLCAmZWNjX2NvZGVbaV0sICZlY2NfY2FsY1tpXSk7Ci0JCWlmIChzdGF0ID09IC0xKQorCQlpZiAoc3RhdCA8IDApCiAJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKIAkJZWxzZQogCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHN0YXQ7CkBAIC0xMDcyLDYgKzExMTksNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIEhhcmR3YXJlIEVDQyBmb3IgbGFyZ2UgcGFnZSBjaGlwcywgcmVxdWlyZSBPT0IgdG8gYmUgcmVhZCBmaXJzdC4KICAqIEZvciB0aGlzIEVDQyBtb2RlLCB0aGUgd3JpdGVfcGFnZSBtZXRob2QgaXMgcmUtdXNlZCBmcm9tIEVDQ19IVy4KQEAgLTExMjAsNiArMTE2OCw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogVGhlIGh3IGdlbmVyYXRvciBjYWxjdWxhdGVzIHRoZSBlcnJvciBzeW5kcm9tZSBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcgogICogd2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcuCkBAIC0xNjc3LDYgKzE3MjYsOCBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglkYXRhIGJ1ZmZlcgorICoKKyAqIE5vdCBmb3Igc3luZHJvbWUgY2FsY3VsYXRpbmcgZWNjIGNvbnRyb2xsZXJzLCB3aGljaCB1c2UgYSBzcGVjaWFsIG9vYiBsYXlvdXQKICAqLwogc3RhdGljIHZvaWQgbmFuZF93cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKIAkJCQljb25zdCB1aW50OF90ICpidWYpCkBAIC0xNjg1LDYgKzE3MzYsNDQgQEAKIAljaGlwLT53cml0ZV9idWYobXRkLCBjaGlwLT5vb2JfcG9pLCBtdGQtPm9vYnNpemUpOwogfQogCisvKioKKyAqIG5hbmRfd3JpdGVfcGFnZV9yYXdfc3luZHJvbWUgLSBbSW50ZXJuXSByYXcgcGFnZSB3cml0ZSBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglkYXRhIGJ1ZmZlcgorICoKKyAqIFdlIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQgYW5kIGhhbmRsaW5nIGV2ZW4gd2hlbiBFQ0MgaXNuJ3QgY2hlY2tlZC4KKyAqLworc3RhdGljIHZvaWQgbmFuZF93cml0ZV9wYWdlX3Jhd19zeW5kcm9tZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQljb25zdCB1aW50OF90ICpidWYpCit7CisJaW50IGVjY3NpemUgPSBjaGlwLT5lY2Muc2l6ZTsKKwlpbnQgZWNjYnl0ZXMgPSBjaGlwLT5lY2MuYnl0ZXM7CisJdWludDhfdCAqb29iID0gY2hpcC0+b29iX3BvaTsKKwlpbnQgc3RlcHMsIHNpemU7CisKKwlmb3IgKHN0ZXBzID0gY2hpcC0+ZWNjLnN0ZXBzOyBzdGVwcyA+IDA7IHN0ZXBzLS0pIHsKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmLCBlY2NzaXplKTsKKwkJYnVmICs9IGVjY3NpemU7CisKKwkJaWYgKGNoaXAtPmVjYy5wcmVwYWQpIHsKKwkJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnByZXBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnByZXBhZDsKKwkJfQorCisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBlY2NieXRlcyk7CisJCW9vYiArPSBlY2NieXRlczsKKworCQlpZiAoY2hpcC0+ZWNjLnBvc3RwYWQpIHsKKwkJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnBvc3RwYWQpOworCQkJb29iICs9IGNoaXAtPmVjYy5wb3N0cGFkOworCQl9CisJfQorCisJc2l6ZSA9IG10ZC0+b29ic2l6ZSAtIChvb2IgLSBjaGlwLT5vb2JfcG9pKTsKKwlpZiAoc2l6ZSkKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgb29iLCBzaXplKTsKK30KIC8qKgogICogbmFuZF93cml0ZV9wYWdlX3N3ZWNjIC0gW1JFUExBQ0FCTEVdIHNvZnR3YXJlIGVjYyBiYXNlZCBwYWdlIHdyaXRlIGZ1bmN0aW9uCiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKQEAgLTIyMTEsMTMgKzIzMDAsMTUgQEAKIGludCBuYW5kX2VyYXNlX25hbmQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0ciwKIAkJICAgIGludCBhbGxvd2JidCkKIHsKLQlpbnQgcGFnZSwgbGVuLCBzdGF0dXMsIHBhZ2VzX3Blcl9ibG9jaywgcmV0LCBjaGlwbnI7CisJaW50IHBhZ2UsIHN0YXR1cywgcGFnZXNfcGVyX2Jsb2NrLCByZXQsIGNoaXBucjsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwotCWludCByZXdyaXRlX2JidFtDT05GSUdfU1lTX05BTkRfTUFYX0NISVBTXT17MH07CisJbG9mZl90IHJld3JpdGVfYmJ0W0NPTkZJR19TWVNfTkFORF9NQVhfQ0hJUFNdID0gezB9OwogCXVuc2lnbmVkIGludCBiYnRfbWFza2VkX3BhZ2UgPSAweGZmZmZmZmZmOworCWxvZmZfdCBsZW47CiAKLQlNVERERUJVRyAoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfZXJhc2U6IHN0YXJ0ID0gMHglMDh4LCBsZW4gPSAlaVxuIiwKLQkgICAgICAgICAgKHVuc2lnbmVkIGludCkgaW5zdHItPmFkZHIsICh1bnNpZ25lZCBpbnQpIGluc3RyLT5sZW4pOworCU1URERFQlVHKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX2VyYXNlOiBzdGFydCA9IDB4JTAxMmxseCwgIgorCQkgImxlbiA9ICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpIGluc3RyLT5hZGRyLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgaW5zdHItPmxlbik7CiAKIAkvKiBTdGFydCBhZGRyZXNzIG11c3QgYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgKi8KIAlpZiAoaW5zdHItPmFkZHIgJiAoKDEgPDwgY2hpcC0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgewpAQCAtMjMxMyw3ICsyNDA0LDcgQEAKIAkJCU1URERFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogIgogCQkJICAgICAgICAgICJGYWlsZWQgZXJhc2UsIHBhZ2UgMHglMDh4XG4iLCBwYWdlKTsKIAkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7Ci0JCQlpbnN0ci0+ZmFpbF9hZGRyID0gKHBhZ2UgPDwgY2hpcC0+cGFnZV9zaGlmdCk7CisJCQlpbnN0ci0+ZmFpbF9hZGRyID0gKChsb2ZmX3QpcGFnZSA8PCBjaGlwLT5wYWdlX3NoaWZ0KTsKIAkJCWdvdG8gZXJhc2VfZXhpdDsKIAkJfQogCkBAIC0yMzIzLDcgKzI0MTQsOCBAQAogCQkgKi8KIAkJaWYgKGJidF9tYXNrZWRfcGFnZSAhPSAweGZmZmZmZmZmICYmCiAJCSAgICAocGFnZSAmIEJCVF9QQUdFX01BU0spID09IGJidF9tYXNrZWRfcGFnZSkKLQkJCSAgICByZXdyaXRlX2JidFtjaGlwbnJdID0gKHBhZ2UgPDwgY2hpcC0+cGFnZV9zaGlmdCk7CisJCQlyZXdyaXRlX2JidFtjaGlwbnJdID0KKwkJCQkoKGxvZmZfdClwYWdlIDw8IGNoaXAtPnBhZ2Vfc2hpZnQpOwogCiAJCS8qIEluY3JlbWVudCBwYWdlIGFkZHJlc3MgYW5kIGRlY3JlbWVudCBsZW5ndGggKi8KIAkJbGVuIC09ICgxIDw8IGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQpOwpAQCAtMjM3MCw4ICsyNDYyLDggQEAKIAkJCWNvbnRpbnVlOwogCQkvKiB1cGRhdGUgdGhlIEJCVCBmb3IgY2hpcCAqLwogCQlNVERERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2VfbmFuZDogbmFuZF91cGRhdGVfYmJ0ICIKLQkJICAgICAgICAgICIoJWQ6MHglMHggMHglMHgpXG4iLCBjaGlwbnIsIHJld3JpdGVfYmJ0W2NoaXBucl0sCi0JCSAgICAgICAgICBjaGlwLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0pOworCQkJICAiKCVkOjB4JTBsbHggMHglMHgpXG4iLCBjaGlwbnIsIHJld3JpdGVfYmJ0W2NoaXBucl0sCisJCQkgIGNoaXAtPmJidF90ZC0+cGFnZXNbY2hpcG5yXSk7CiAJCW5hbmRfdXBkYXRlX2JidChtdGQsIHJld3JpdGVfYmJ0W2NoaXBucl0pOwogCX0KIApAQCAtMjU2Niw3ICsyNjU4LDcgQEAKIAlpZiAoIW10ZC0+bmFtZSkKIAkJbXRkLT5uYW1lID0gdHlwZS0+bmFtZTsKIAotCWNoaXAtPmNoaXBzaXplID0gdHlwZS0+Y2hpcHNpemUgPDwgMjA7CisJY2hpcC0+Y2hpcHNpemUgPSAodWludDY0X3QpdHlwZS0+Y2hpcHNpemUgPDwgMjA7CiAKIAkvKiBOZXdlciBkZXZpY2VzIGhhdmUgYWxsIHRoZSBpbmZvcm1hdGlvbiBpbiBhZGRpdGlvbmFsIGlkIGJ5dGVzICovCiAJaWYgKCF0eXBlLT5wYWdlc2l6ZSkgewpAQCAtMjYyNCw3ICsyNzE2LDEwIEBACiAKIAljaGlwLT5iYnRfZXJhc2Vfc2hpZnQgPSBjaGlwLT5waHlzX2VyYXNlX3NoaWZ0ID0KIAkJZmZzKG10ZC0+ZXJhc2VzaXplKSAtIDE7Ci0JY2hpcC0+Y2hpcF9zaGlmdCA9IGZmcyhjaGlwLT5jaGlwc2l6ZSkgLSAxOworCWlmIChjaGlwLT5jaGlwc2l6ZSAmIDB4ZmZmZmZmZmYpCisJCWNoaXAtPmNoaXBfc2hpZnQgPSBmZnMoKHVuc2lnbmVkKWNoaXAtPmNoaXBzaXplKSAtIDE7CisJZWxzZQorCQljaGlwLT5jaGlwX3NoaWZ0ID0gZmZzKCh1bnNpZ25lZCkoY2hpcC0+Y2hpcHNpemUgPj4gMzIpKSArIDMxOwogCiAJLyogU2V0IHRoZSBiYWQgYmxvY2sgcG9zaXRpb24gKi8KIAljaGlwLT5iYWRibG9ja3BvcyA9IG10ZC0+d3JpdGVzaXplID4gNTEyID8KQEAgLTI3MjIsNyArMjgxNyw2IEBACiAvKioKICAqIG5hbmRfc2Nhbl90YWlsIC0gW05BTkQgSW50ZXJmYWNlXSBTY2FuIGZvciB0aGUgTkFORCBkZXZpY2UKICAqIEBtdGQ6CSAgICBNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQG1heGNoaXBzOgkgICAgTnVtYmVyIG9mIGNoaXBzIHRvIHNjYW4gZm9yCiAgKgogICogVGhpcyBpcyB0aGUgc2Vjb25kIHBoYXNlIG9mIHRoZSBub3JtYWwgbmFuZF9zY2FuKCkgZnVuY3Rpb24uIEl0CiAgKiBmaWxscyBvdXQgYWxsIHRoZSB1bmluaXRpYWxpemVkIGZ1bmN0aW9uIHBvaW50ZXJzIHdpdGggdGhlIGRlZmF1bHRzCkBAIC0yNzYxLDcgKzI4NTUsNiBAQAogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gb29iIHNjaGVtZSBkZWZpbmVkIGZvciAiCiAJCQkgICAgICAgIm9vYnNpemUgJWRcbiIsIG10ZC0+b29ic2l6ZSk7Ci0vKgkJCUJVRygpOyAqLwogCQl9CiAJfQogCkBAIC0yNzcyLDEwICsyODY1LDYgQEAKIAkgKiBjaGVjayBFQ0MgbW9kZSwgZGVmYXVsdCB0byBzb2Z0d2FyZSBpZiAzYnl0ZS81MTJieXRlIGhhcmR3YXJlIEVDQyBpcwogCSAqIHNlbGVjdGVkIGFuZCB3ZSBoYXZlIDI1NiBieXRlIHBhZ2VzaXplIGZhbGxiYWNrIHRvIHNvZnR3YXJlIEVDQwogCSAqLwotCWlmICghY2hpcC0+ZWNjLnJlYWRfcGFnZV9yYXcpCi0JCWNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gbmFuZF9yZWFkX3BhZ2VfcmF3OwotCWlmICghY2hpcC0+ZWNjLndyaXRlX3BhZ2VfcmF3KQotCQljaGlwLT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBuYW5kX3dyaXRlX3BhZ2VfcmF3OwogCiAJc3dpdGNoIChjaGlwLT5lY2MubW9kZSkgewogCWNhc2UgTkFORF9FQ0NfSFdfT09CX0ZJUlNUOgpAQCAtMjc5NSw2ICsyODg0LDEwIEBACiAJCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2VfaHdlY2M7CiAJCWlmICghY2hpcC0+ZWNjLndyaXRlX3BhZ2UpCiAJCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9od2VjYzsKKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9wYWdlX3JhdykKKwkJCWNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gbmFuZF9yZWFkX3BhZ2VfcmF3OworCQlpZiAoIWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdykKKwkJCWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdyA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CiAJCWlmICghY2hpcC0+ZWNjLnJlYWRfb29iKQogCQkJY2hpcC0+ZWNjLnJlYWRfb29iID0gbmFuZF9yZWFkX29vYl9zdGQ7CiAJCWlmICghY2hpcC0+ZWNjLndyaXRlX29vYikKQEAgLTI4MTYsNiArMjkwOSwxMCBAQAogCQkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IG5hbmRfcmVhZF9wYWdlX3N5bmRyb21lOwogCQlpZiAoIWNoaXAtPmVjYy53cml0ZV9wYWdlKQogCQkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSBuYW5kX3dyaXRlX3BhZ2Vfc3luZHJvbWU7CisJCWlmICghY2hpcC0+ZWNjLnJlYWRfcGFnZV9yYXcpCisJCQljaGlwLT5lY2MucmVhZF9wYWdlX3JhdyA9IG5hbmRfcmVhZF9wYWdlX3Jhd19zeW5kcm9tZTsKKwkJaWYgKCFjaGlwLT5lY2Mud3JpdGVfcGFnZV9yYXcpCisJCQljaGlwLT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBuYW5kX3dyaXRlX3BhZ2VfcmF3X3N5bmRyb21lOwogCQlpZiAoIWNoaXAtPmVjYy5yZWFkX29vYikKIAkJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3luZHJvbWU7CiAJCWlmICghY2hpcC0+ZWNjLndyaXRlX29vYikKQEAgLTI4MzQsNiArMjkzMSw4IEBACiAJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBuYW5kX3JlYWRfcGFnZV9zd2VjYzsKIAkJY2hpcC0+ZWNjLnJlYWRfc3VicGFnZSA9IG5hbmRfcmVhZF9zdWJwYWdlOwogCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9zd2VjYzsKKwkJY2hpcC0+ZWNjLnJlYWRfcGFnZV9yYXcgPSBuYW5kX3JlYWRfcGFnZV9yYXc7CisJCWNoaXAtPmVjYy53cml0ZV9wYWdlX3JhdyA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CiAJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3RkOwogCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOwogCQljaGlwLT5lY2Muc2l6ZSA9IDI1NjsKQEAgLTI4NDYsNiArMjk0NSw4IEBACiAJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBuYW5kX3JlYWRfcGFnZV9yYXc7CiAJCWNoaXAtPmVjYy53cml0ZV9wYWdlID0gbmFuZF93cml0ZV9wYWdlX3JhdzsKIAkJY2hpcC0+ZWNjLnJlYWRfb29iID0gbmFuZF9yZWFkX29vYl9zdGQ7CisJCWNoaXAtPmVjYy5yZWFkX3BhZ2VfcmF3ID0gbmFuZF9yZWFkX3BhZ2VfcmF3OworCQljaGlwLT5lY2Mud3JpdGVfcGFnZV9yYXcgPSBuYW5kX3dyaXRlX3BhZ2VfcmF3OwogCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOwogCQljaGlwLT5lY2Muc2l6ZSA9IG10ZC0+d3JpdGVzaXplOwogCQljaGlwLT5lY2MuYnl0ZXMgPSAwOwpAQCAtMjg2Miw3ICsyOTYzLDggQEAKIAkgKiB0aGUgb3V0IG9mIGJhbmQgYXJlYQogCSAqLwogCWNoaXAtPmVjYy5sYXlvdXQtPm9vYmF2YWlsID0gMDsKLQlmb3IgKGkgPSAwOyBjaGlwLT5lY2MubGF5b3V0LT5vb2JmcmVlW2ldLmxlbmd0aDsgaSsrKQorCWZvciAoaSA9IDA7IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmZyZWVbaV0ubGVuZ3RoCisJCQkmJiBpIDwgQVJSQVlfU0laRShjaGlwLT5lY2MubGF5b3V0LT5vb2JmcmVlKTsgaSsrKQogCQljaGlwLT5lY2MubGF5b3V0LT5vb2JhdmFpbCArPQogCQkJY2hpcC0+ZWNjLmxheW91dC0+b29iZnJlZVtpXS5sZW5ndGg7CiAJbXRkLT5vb2JhdmFpbCA9IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmF2YWlsOwpAQCAtMjg5MCw2ICsyOTkyLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIDQ6CiAJCWNhc2UgODoKKwkJY2FzZSAxNjoKIAkJCW10ZC0+c3VicGFnZV9zZnQgPSAyOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYwppbmRleCBkNjhhMzE1Zi4uMmZlNjhhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYwpAQCAtMTgyLDE2ICsxODIsMTkgQEAKIAkJCQlpZiAodG1wID09IG1zaykKIAkJCQkJY29udGludWU7CiAJCQkJaWYgKHJlc2VydmVkX2Jsb2NrX2NvZGUgJiYgKHRtcCA9PSByZXNlcnZlZF9ibG9ja19jb2RlKSkgewotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAibmFuZF9yZWFkX2JidDogUmVzZXJ2ZWQgYmxvY2sgYXQgMHglMDh4XG4iLAotCQkJCQkgICAgICAgKChvZmZzIDw8IDIpICsgKGFjdCA+PiAxKSkgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIm5hbmRfcmVhZF9iYnQ6IFJlc2VydmVkIGJsb2NrIGF0IDB4JTAxMmxseFxuIiwKKwkJCQkJCShsb2ZmX3QpKChvZmZzIDw8IDIpICsKKwkJCQkJCShhY3QgPj4gMSkpIDw8CisJCQkJCQl0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOwogCQkJCQl0aGlzLT5iYnRbb2ZmcyArIChhY3QgPj4gMyldIHw9IDB4MiA8PCAoYWN0ICYgMHgwNik7CiAJCQkJCW10ZC0+ZWNjX3N0YXRzLmJidGJsb2NrcysrOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJLyogTGVhdmUgaXQgZm9yIG5vdywgaWYgaXRzIG1hdHVyZWQgd2UgY2FuIG1vdmUgdGhpcwogCQkJCSAqIG1lc3NhZ2UgdG8gTVREX0RFQlVHX0xFVkVMMCAqLwotCQkJCXByaW50ayhLRVJOX0RFQlVHICJuYW5kX3JlYWRfYmJ0OiBCYWQgYmxvY2sgYXQgMHglMDh4XG4iLAotCQkJCSAgICAgICAoKG9mZnMgPDwgMikgKyAoYWN0ID4+IDEpKSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJuYW5kX3JlYWRfYmJ0OiBCYWQgYmxvY2sgYXQgMHglMDEybGx4XG4iLAorCQkJCQkobG9mZl90KSgob2ZmcyA8PCAyKSArIChhY3QgPj4gMSkpIDw8CisJCQkJCXRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJCQkJLyogRmFjdG9yeSBtYXJrZWQgYmFkIG9yIHdvcm4gb3V0ID8gKi8KIAkJCQlpZiAodG1wID09IDApCiAJCQkJCXRoaXMtPmJidFtvZmZzICsgKGFjdCA+PiAzKV0gfD0gMHgzIDw8IChhY3QgJiAweDA2KTsKQEAgLTI5NSw4ICsyOTgsOCBAQAogCiAJLyogUmVhZCB0aGUgcHJpbWFyeSB2ZXJzaW9uLCBpZiBhdmFpbGFibGUgKi8KIAlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKSB7Ci0JCXNjYW5fcmVhZF9yYXcobXRkLCBidWYsIHRkLT5wYWdlc1swXSA8PCB0aGlzLT5wYWdlX3NoaWZ0LAotCQkJICAgICAgbXRkLT53cml0ZXNpemUpOworCQlzY2FuX3JlYWRfcmF3KG10ZCwgYnVmLCAobG9mZl90KXRkLT5wYWdlc1swXSA8PAorCQkJCXRoaXMtPnBhZ2Vfc2hpZnQsIG10ZC0+d3JpdGVzaXplKTsKIAkJdGQtPnZlcnNpb25bMF0gPSBidWZbbXRkLT53cml0ZXNpemUgKyB0ZC0+dmVyb2Zmc107CiAJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgYmxvY2sgdGFibGUgYXQgcGFnZSAlZCwgdmVyc2lvbiAweCUwMlhcbiIsCiAJCSAgICAgICB0ZC0+cGFnZXNbMF0sIHRkLT52ZXJzaW9uWzBdKTsKQEAgLTMwNCw4ICszMDcsOCBAQAogCiAJLyogUmVhZCB0aGUgbWlycm9yIHZlcnNpb24sIGlmIGF2YWlsYWJsZSAqLwogCWlmIChtZCAmJiAobWQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKSkgewotCQlzY2FuX3JlYWRfcmF3KG10ZCwgYnVmLCBtZC0+cGFnZXNbMF0gPDwgdGhpcy0+cGFnZV9zaGlmdCwKLQkJCSAgICAgIG10ZC0+d3JpdGVzaXplKTsKKwkJc2Nhbl9yZWFkX3JhdyhtdGQsIGJ1ZiwgKGxvZmZfdCltZC0+cGFnZXNbMF0gPDwKKwkJCQl0aGlzLT5wYWdlX3NoaWZ0LCBtdGQtPndyaXRlc2l6ZSk7CiAJCW1kLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+d3JpdGVzaXplICsgbWQtPnZlcm9mZnNdOwogCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLAogCQkgICAgICAgbWQtPnBhZ2VzWzBdLCBtZC0+dmVyc2lvblswXSk7CkBAIC00MjIsNyArNDI1LDcgQEAKIAkJbnVtYmxvY2tzID0gdGhpcy0+Y2hpcHNpemUgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpOwogCQlzdGFydGJsb2NrID0gY2hpcCAqIG51bWJsb2NrczsKIAkJbnVtYmxvY2tzICs9IHN0YXJ0YmxvY2s7Ci0JCWZyb20gPSBzdGFydGJsb2NrIDw8ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKTsKKwkJZnJvbSA9IChsb2ZmX3Qpc3RhcnRibG9jayA8PCAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gMSk7CiAJfQogCiAJZm9yIChpID0gc3RhcnRibG9jazsgaSA8IG51bWJsb2NrczspIHsKQEAgLTQ0MCw4ICs0NDMsOCBAQAogCQlpZiAocmV0KSB7CiAJCQl0aGlzLT5iYnRbaSA+PiAzXSB8PSAweDAzIDw8IChpICYgMHg2KTsKIAkJCU1URERFQlVHIChNVERfREVCVUdfTEVWRUwwLAotCQkJICAgICAgICAgICJCYWQgZXJhc2VibG9jayAlZCBhdCAweCUwOHhcbiIsCi0JCQkgICAgICAgICAgaSA+PiAxLCAodW5zaWduZWQgaW50KWZyb20pOworCQkJCSAgIkJhZCBlcmFzZWJsb2NrICVkIGF0IDB4JTAxMmxseFxuIiwKKwkJCQkgIGkgPj4gMSwgKHVuc2lnbmVkIGxvbmcgbG9uZylmcm9tKTsKIAkJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOwogCQl9CiAKQEAgLTUwNyw3ICs1MTAsNyBAQAogCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCB0ZC0+bWF4YmxvY2tzOyBibG9jaysrKSB7CiAKIAkJCWludCBhY3RibG9jayA9IHN0YXJ0YmxvY2sgKyBkaXIgKiBibG9jazsKLQkJCWxvZmZfdCBvZmZzID0gYWN0YmxvY2sgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0OworCQkJbG9mZl90IG9mZnMgPSAobG9mZl90KWFjdGJsb2NrIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdDsKIAogCQkJLyogUmVhZCBmaXJzdCBwYWdlICovCiAJCQlzY2FuX3JlYWRfcmF3KG10ZCwgYnVmLCBvZmZzLCBtdGQtPndyaXRlc2l6ZSk7CkBAIC03MzEsNyArNzM0LDcgQEAKIAogCQltZW1zZXQoJmVpbmZvLCAwLCBzaXplb2YoZWluZm8pKTsKIAkJZWluZm8ubXRkID0gbXRkOwotCQllaW5mby5hZGRyID0gKHVuc2lnbmVkIGxvbmcpdG87CisJCWVpbmZvLmFkZHIgPSB0bzsKIAkJZWluZm8ubGVuID0gMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7CiAJCXJlcyA9IG5hbmRfZXJhc2VfbmFuZChtdGQsICZlaW5mbywgMSk7CiAJCWlmIChyZXMgPCAwKQpAQCAtNzQxLDggKzc0NCw5IEBACiAJCWlmIChyZXMgPCAwKQogCQkJZ290byBvdXRlcnI7CiAKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBibG9jayB0YWJsZSB3cml0dGVuIHRvIDB4JTA4eCwgdmVyc2lvbiAiCi0JCSAgICAgICAiMHglMDJYXG4iLCAodW5zaWduZWQgaW50KXRvLCB0ZC0+dmVyc2lvbltjaGlwXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgYmxvY2sgdGFibGUgd3JpdHRlbiB0byAweCUwMTJsbHgsICIKKwkJICAgICAgICJ2ZXJzaW9uIDB4JTAyWFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl0bywKKwkJICAgICAgIHRkLT52ZXJzaW9uW2NoaXBdKTsKIAogCQkvKiBNYXJrIGl0IGFzIHVzZWQgKi8KIAkJdGQtPnBhZ2VzW2NoaXBdID0gcGFnZTsKQEAgLTkyMiw3ICs5MjYsOCBAQAogCQkJbmV3dmFsID0gb2xkdmFsIHwgKDB4MiA8PCAoYmxvY2sgJiAweDA2KSk7CiAJCQl0aGlzLT5iYnRbKGJsb2NrID4+IDMpXSA9IG5ld3ZhbDsKIAkJCWlmICgob2xkdmFsICE9IG5ld3ZhbCkgJiYgdGQtPnJlc2VydmVkX2Jsb2NrX2NvZGUpCi0JCQkJbmFuZF91cGRhdGVfYmJ0KG10ZCwgYmxvY2sgPDwgKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpKTsKKwkJCQluYW5kX3VwZGF0ZV9iYnQobXRkLCAobG9mZl90KWJsb2NrIDw8CisJCQkJCSh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKSk7CiAJCQljb250aW51ZTsKIAkJfQogCQl1cGRhdGUgPSAwOwpAQCAtOTQzLDcgKzk0OCw4IEBACiAJCSAgIG5ldyBvbmVzIGhhdmUgYmVlbiBtYXJrZWQsIHRoZW4gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0b3JlZAogCQkgICBiYnRzLiAgVGhpcyBzaG91bGQgb25seSBoYXBwZW4gb25jZS4gKi8KIAkJaWYgKHVwZGF0ZSAmJiB0ZC0+cmVzZXJ2ZWRfYmxvY2tfY29kZSkKLQkJCW5hbmRfdXBkYXRlX2JidChtdGQsIChibG9jayAtIDIpIDw8ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKSk7CisJCQluYW5kX3VwZGF0ZV9iYnQobXRkLCAobG9mZl90KShibG9jayAtIDIpIDw8CisJCQkJKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpKTsKIAl9CiB9CiAKQEAgLTEwMzksNyArMTA0NSw2IEBACiAJaWYgKCF0aGlzLT5iYnQgfHwgIXRkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWxlbiA9IG10ZC0+c2l6ZSA+PiAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0ICsgMik7CiAJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBvbmUgZXJhc2VibG9jayBpbmNsLiBvb2IgKi8KIAlsZW4gPSAoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOwogCWxlbiArPSAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpICogbXRkLT5vb2JzaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMF9uYW5kLmMKaW5kZXggZjJmM2U3Mi4uYTI3ZDQ3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTBfbmFuZC5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKICNpbmNsdWRlIDxuYW5kLmg+Ci0jaW5jbHVkZSA8czNjMjQxMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDBfY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgUzNDMjQxMF9ORkNPTkZfRU4gICAgICAgICAgKDE8PDE1KQpAQCAtMzYsNiArMzYsMjEgQEAKICNkZWZpbmUgUzNDMjQxMF9BRERSX05BTEUgNAogI2RlZmluZSBTM0MyNDEwX0FERFJfTkNMRSA4CiAKKyNpZmRlZiBDT05GSUdfTkFORF9TUEwKKworLyogaW4gdGhlIGVhcmx5IHN0YWdlIG9mIE5BTkQgZmxhc2ggYm9vdGluZywgcHJpbnRmKCkgaXMgbm90IGF2YWlsYWJsZSAqLworI2RlZmluZSBwcmludGYoZm10LCBhcmdzLi4uKQorCitzdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlidWZbaV0gPSByZWFkYih0aGlzLT5JT19BRERSX1IpOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHMzYzI0MTBfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwpAQCAtODMsOSArOTgsMTAgQEAKIHN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LAogCQkJCSAgICAgIHVfY2hhciAqZWNjX2NvZGUpCiB7Ci0JZWNjX2NvZGVbMF0gPSBORkVDQzA7Ci0JZWNjX2NvZGVbMV0gPSBORkVDQzE7Ci0JZWNjX2NvZGVbMl0gPSBORkVDQzI7CisJc3RydWN0IHMzYzI0MTBfbmFuZCAqbmFuZCA9IHMzYzI0MTBfZ2V0X2Jhc2VfbmFuZCgpOworCWVjY19jb2RlWzBdID0gcmVhZGIoJm5hbmQtPk5GRUNDKTsKKwllY2NfY29kZVsxXSA9IHJlYWRiKCZuYW5kLT5ORkVDQyArIDEpOworCWVjY19jb2RlWzJdID0gcmVhZGIoJm5hbmQtPk5GRUNDICsgMik7CiAJZGVidWdYKDEsICJzM2MyNDEwX25hbmRfY2FsY3VsYXRlX2h3ZWNjKCVwLCk6IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAogCSAgICAgICBtdGQgLCBlY2NfY29kZVswXSwgZWNjX2NvZGVbMV0sIGVjY19jb2RlWzJdKTsKIApAQCAtMTMwLDggKzE0NiwxMyBAQAogCS8qIGluaXRpYWxpemUgbmFuZF9jaGlwIGRhdGEgc3RydWN0dXJlICovCiAJbmFuZC0+SU9fQUREUl9SID0gbmFuZC0+SU9fQUREUl9XID0gKHZvaWQgKikmbmFuZF9yZWctPk5GREFUQTsKIAorCW5hbmQtPnNlbGVjdF9jaGlwID0gTlVMTDsKKwogCS8qIHJlYWRfYnVmIGFuZCB3cml0ZV9idWYgYXJlIGRlZmF1bHQgKi8KIAkvKiByZWFkX2J5dGUgYW5kIHdyaXRlX2J5dGUgYXJlIGRlZmF1bHQgKi8KKyNpZmRlZiBDT05GSUdfTkFORF9TUEwKKwluYW5kLT5yZWFkX2J1ZiA9IG5hbmRfcmVhZF9idWY7CisjZW5kaWYKIAogCS8qIGh3Y29udHJvbCBhbHdheXMgbXVzdCBiZSBpbXBsZW1lbnRlZCAqLwogCW5hbmQtPmNtZF9jdHJsID0gczNjMjQxMF9od2NvbnRyb2w7CkBAIC0xNDIsNyArMTYzLDkgQEAKIAluYW5kLT5lY2MuaHdjdGwgPSBzM2MyNDEwX25hbmRfZW5hYmxlX2h3ZWNjOwogCW5hbmQtPmVjYy5jYWxjdWxhdGUgPSBzM2MyNDEwX25hbmRfY2FsY3VsYXRlX2VjYzsKIAluYW5kLT5lY2MuY29ycmVjdCA9IHMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGE7Ci0JbmFuZC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzNfNTEyOworCW5hbmQtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7CisJbmFuZC0+ZWNjLnNpemUgPSBDT05GSUdfU1lTX05BTkRfRUNDU0laRTsKKwluYW5kLT5lY2MuYnl0ZXMgPSBDT05GSUdfU1lTX05BTkRfRUNDQllURVM7CiAjZWxzZQogCW5hbmQtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zM2M2NHh4LmMgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzY0eHguYwppbmRleCBlZGFmNTVhLi4wODRlNDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3MzYzY0eHguYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzY0eHguYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGNvbW1vbi5oPgogCiAjaW5jbHVkZSA8bmFuZC5oPgotI2luY2x1ZGUgPHMzYzY0MDAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zM2M2NDAwLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCmluZGV4IDM2OGZhNmUuLmY5MjczYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwpAQCAtOSw2ICs5LDExIEBACiAgKiAgICAgIGF1dG8tcGxhY2VtZW50IHN1cHBvcnQsIHJlYWQtd2hpbGUgbG9hZCBzdXBwb3J0LCB2YXJpb3VzIGZpeGVzCiAgKiAgICAgIENvcHlyaWdodCAoQykgTm9raWEgQ29ycG9yYXRpb24sIDIwMDcKICAqCisgKiAgICAgIFJvaGl0IEhhZ2FyZ3VuZGdpIDxoLnJvaGl0IGF0IHNhbXN1bmcuY29tPiwKKyAqICAgICAgQW11bCBLdW1hciBTYWhhIDxhbXVsLnNhaGFAc2Ftc3VuZy5jb20+OgorICogICAgICBGbGV4LU9uZU5BTkQgc3VwcG9ydAorICogICAgICBDb3B5cmlnaHQgKEMpIFNhbXN1bmcgRWxlY3Ryb25pY3MsIDIwMDkKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgpAQCAtMjQsNyArMjksNyBAQAogI2luY2x1ZGUgPG1hbGxvYy5oPgogCiAvKiBJdCBzaG91bGQgYWNjZXNzIDE2LWJpdCBpbnN0ZWFkIG9mIDgtYml0ICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKm1lbWNweV8xNih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkICptZW1jcHlfMTYodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdm9pZCAqcmV0ID0gZHN0OwogCXNob3J0ICpkID0gZHN0OwpAQCAtMzcsNiArNDIsMjcgQEAKIH0KIAogLyoqCisgKiAgb25lbmFuZF9vb2JfMTI4IC0gb29iIGluZm8gZm9yIEZsZXgtT25lbmFuZCB3aXRoIDRLQiBwYWdlCisgKiAgRm9yIG5vdywgd2UgZXhwb3NlIG9ubHkgNjQgb3V0IG9mIDgwIGVjYyBieXRlcworICovCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG9uZW5hbmRfb29iXzEyOCA9IHsKKwkuZWNjYnl0ZXMJPSA2NCwKKwkuZWNjcG9zCQk9IHsKKwkJNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwKKwkJMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsCisJCTM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LAorCQk1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywKKwkJNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksCisJCTg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LAorCQkxMDIsIDEwMywgMTA0LCAxMDUKKwkJfSwKKwkub29iZnJlZQk9IHsKKwkJezIsIDR9LCB7MTgsIDR9LCB7MzQsIDR9LCB7NTAsIDR9LAorCQl7NjYsIDR9LCB7ODIsIDR9LCB7OTgsIDR9LCB7MTE0LCA0fQorCX0KK307CisKKy8qKgogICogb25lbmFuZF9vb2JfNjQgLSBvb2IgaW5mbyBmb3IgbGFyZ2UgKDJLQikgcGFnZQogICovCiBzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG9uZW5hbmRfb29iXzY0ID0gewpAQCAtNzQsNiArMTAwLDE0IEBACiAJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwJLyogNDggKi8KIAkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAogCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCS8qIDY0ICovCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAkvKiA4MCAqLworCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwJLyogOTYgKi8KKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCS8qIDExMiAqLworCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwJLyogMTI4ICovCiB9OwogCiAvKioKQEAgLTE4MCw2ICsyMTQsODUgQEAKIH0KIAogLyoqCisgKiBmbGV4b25lbmFuZF9ibG9jayAtIFJldHVybiBibG9jayBudW1iZXIgZm9yIGZsYXNoIGFkZHJlc3MKKyAqIEBwYXJhbSB0aGlzCQktIE9uZU5BTkQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGFkZHIJCS0gQWRkcmVzcyBmb3Igd2hpY2ggYmxvY2sgbnVtYmVyIGlzIG5lZWRlZAorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGZsZXhvbmVuYW5kX2Jsb2NrKHN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMsIGxvZmZfdCBhZGRyKQoreworCXVuc2lnbmVkIGludCBib3VuZGFyeSwgYmxrLCBkaWUgPSAwOworCisJaWYgKE9ORU5BTkRfSVNfRERQKHRoaXMpICYmIGFkZHIgPj0gdGhpcy0+ZGllc2l6ZVswXSkgeworCQlkaWUgPSAxOworCQlhZGRyIC09IHRoaXMtPmRpZXNpemVbMF07CisJfQorCisJYm91bmRhcnkgPSB0aGlzLT5ib3VuZGFyeVtkaWVdOworCisJYmxrID0gYWRkciA+PiAodGhpcy0+ZXJhc2Vfc2hpZnQgLSAxKTsKKwlpZiAoYmxrID4gYm91bmRhcnkpCisJCWJsayA9IChibGsgKyBib3VuZGFyeSArIDEpID4+IDE7CisKKwlibGsgKz0gZGllID8gdGhpcy0+ZGVuc2l0eV9tYXNrIDogMDsKKwlyZXR1cm4gYmxrOworfQorCit1bnNpZ25lZCBpbnQgb25lbmFuZF9ibG9jayhzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzLCBsb2ZmX3QgYWRkcikKK3sKKwlpZiAoIUZMRVhPTkVOQU5EKHRoaXMpKQorCQlyZXR1cm4gYWRkciA+PiB0aGlzLT5lcmFzZV9zaGlmdDsKKwlyZXR1cm4gZmxleG9uZW5hbmRfYmxvY2sodGhpcywgYWRkcik7Cit9CisKKy8qKgorICogZmxleG9uZW5hbmRfYWRkciAtIFJldHVybiBhZGRyZXNzIG9mIHRoZSBibG9jaworICogQHRoaXM6CQlPbmVOQU5EIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBibG9jazoJCUJsb2NrIG51bWJlciBvbiBGbGV4LU9uZU5BTkQKKyAqCisgKiBSZXR1cm4gYWRkcmVzcyBvZiB0aGUgYmxvY2sKKyAqLworc3RhdGljIGxvZmZfdCBmbGV4b25lbmFuZF9hZGRyKHN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMsIGludCBibG9jaykKK3sKKwlsb2ZmX3Qgb2ZzID0gMDsKKwlpbnQgZGllID0gMCwgYm91bmRhcnk7CisKKwlpZiAoT05FTkFORF9JU19ERFAodGhpcykgJiYgYmxvY2sgPj0gdGhpcy0+ZGVuc2l0eV9tYXNrKSB7CisJCWJsb2NrIC09IHRoaXMtPmRlbnNpdHlfbWFzazsKKwkJZGllID0gMTsKKwkJb2ZzID0gdGhpcy0+ZGllc2l6ZVswXTsKKwl9CisKKwlib3VuZGFyeSA9IHRoaXMtPmJvdW5kYXJ5W2RpZV07CisJb2ZzICs9IChsb2ZmX3QpIGJsb2NrIDw8ICh0aGlzLT5lcmFzZV9zaGlmdCAtIDEpOworCWlmIChibG9jayA+IChib3VuZGFyeSArIDEpKQorCQlvZnMgKz0gKGxvZmZfdCkgKGJsb2NrIC0gYm91bmRhcnkgLSAxKQorCQkJPDwgKHRoaXMtPmVyYXNlX3NoaWZ0IC0gMSk7CisJcmV0dXJuIG9mczsKK30KKworbG9mZl90IG9uZW5hbmRfYWRkcihzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzLCBpbnQgYmxvY2spCit7CisJaWYgKCFGTEVYT05FTkFORCh0aGlzKSkKKwkJcmV0dXJuIChsb2ZmX3QpIGJsb2NrIDw8IHRoaXMtPmVyYXNlX3NoaWZ0OworCXJldHVybiBmbGV4b25lbmFuZF9hZGRyKHRoaXMsIGJsb2NrKTsKK30KKworLyoqCisgKiBmbGV4b25lbmFuZF9yZWdpb24gLSBbRmxleC1PbmVOQU5EXSBSZXR1cm4gZXJhc2UgcmVnaW9uIG9mIGFkZHIKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gYWRkcgkJYWRkcmVzcyB3aG9zZSBlcmFzZSByZWdpb24gbmVlZHMgdG8gYmUgaWRlbnRpZmllZAorICovCitpbnQgZmxleG9uZW5hbmRfcmVnaW9uKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgYWRkcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtdGQtPm51bWVyYXNlcmVnaW9uczsgaSsrKQorCQlpZiAoYWRkciA8IG10ZC0+ZXJhc2VyZWdpb25zW2ldLm9mZnNldCkKKwkJCWJyZWFrOworCXJldHVybiBpIC0gMTsKK30KKworLyoqCiAgKiBvbmVuYW5kX2dldF9kZW5zaXR5IC0gW0RFRkFVTFRdIEdldCBPbmVOQU5EIGRlbnNpdHkKICAqIEBwYXJhbSBkZXZfaWQgICAgICAgIE9uZU5BTkQgZGV2aWNlIElECiAgKgpAQCAtMjA1LDEwICszMTgsMTEgQEAKIAkJCSAgIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgdmFsdWUsIHJlYWRjbWQgPSAwOworCWludCB2YWx1ZTsKIAlpbnQgYmxvY2ssIHBhZ2U7CisKIAkvKiBOb3cgd2UgdXNlIHBhZ2Ugc2l6ZSBvcGVyYXRpb24gKi8KLQlpbnQgc2VjdG9ycyA9IDQsIGNvdW50ID0gNDsKKwlpbnQgc2VjdG9ycyA9IDAsIGNvdW50ID0gMDsKIAogCS8qIEFkZHJlc3MgdHJhbnNsYXRpb24gKi8KIAlzd2l0Y2ggKGNtZCkgewpAQCAtMjIwLDE1ICszMzQsMjggQEAKIAkJcGFnZSA9IC0xOwogCQlicmVhazsKIAorCWNhc2UgRkxFWE9ORU5BTkRfQ01EX1BJX0FDQ0VTUzoKKwkJLyogYWRkciBjb250YWlucyBkaWUgaW5kZXggKi8KKwkJYmxvY2sgPSBhZGRyICogdGhpcy0+ZGVuc2l0eV9tYXNrOworCQlwYWdlID0gLTE7CisJCWJyZWFrOworCiAJY2FzZSBPTkVOQU5EX0NNRF9FUkFTRToKIAljYXNlIE9ORU5BTkRfQ01EX0JVRkZFUlJBTToKLQkJYmxvY2sgPSAoaW50KShhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KTsKKwkJYmxvY2sgPSBvbmVuYW5kX2Jsb2NrKHRoaXMsIGFkZHIpOwogCQlwYWdlID0gLTE7CiAJCWJyZWFrOwogCisJY2FzZSBGTEVYT05FTkFORF9DTURfUkVBRF9QSToKKwkJY21kID0gT05FTkFORF9DTURfUkVBRDsKKwkJYmxvY2sgPSBhZGRyICogdGhpcy0+ZGVuc2l0eV9tYXNrOworCQlwYWdlID0gMDsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgotCQlibG9jayA9IChpbnQpKGFkZHIgPj4gdGhpcy0+ZXJhc2Vfc2hpZnQpOwotCQlwYWdlID0gKGludCkoYWRkciA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKKwkJYmxvY2sgPSBvbmVuYW5kX2Jsb2NrKHRoaXMsIGFkZHIpOworCQlwYWdlID0gKGludCkgKGFkZHIKKwkJCS0gb25lbmFuZF9hZGRyKHRoaXMsIGJsb2NrKSkgPj4gdGhpcy0+cGFnZV9zaGlmdDsKIAkJcGFnZSAmPSB0aGlzLT5wYWdlX21hc2s7CiAJCWJyZWFrOwogCX0KQEAgLTI0MCw4ICszNjcsMTEgQEAKIAkJdGhpcy0+d3JpdGVfd29yZCh2YWx1ZSwKIAkJCQkgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1MyKTsKIAotCQkvKiBTd2l0Y2ggdG8gdGhlIG5leHQgZGF0YSBidWZmZXIgKi8KLQkJT05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcyk7CisJCWlmIChPTkVOQU5EX0lTX01MQyh0aGlzKSkKKwkJCU9ORU5BTkRfU0VUX0JVRkZFUlJBTTAodGhpcyk7CisJCWVsc2UKKwkJCS8qIFN3aXRjaCB0byB0aGUgbmV4dCBkYXRhIGJ1ZmZlciAqLworCQkJT05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcyk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjUyLDcgKzM4Miw3IEBACiAJCXRoaXMtPndyaXRlX3dvcmQodmFsdWUsCiAJCQkJIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMSk7CiAKLQkJLyogV3JpdGUgJ0RGUywgRkJBJyBvZiBGbGFzaCAqLworCQkvKiBTZWxlY3QgRGF0YVJBTSBmb3IgRERQICovCiAJCXZhbHVlID0gb25lbmFuZF9idWZmZXJyYW1fYWRkcmVzcyh0aGlzLCBibG9jayk7CiAJCXRoaXMtPndyaXRlX3dvcmQodmFsdWUsCiAJCQkJIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMik7CkBAIC0yNjIsMTAgKzM5MiwxNCBAQAogCQlpbnQgZGF0YXJhbTsKIAogCQlzd2l0Y2ggKGNtZCkgeworCQljYXNlIEZMRVhPTkVOQU5EX0NNRF9SRUNPVkVSX0xTQjoKIAkJY2FzZSBPTkVOQU5EX0NNRF9SRUFEOgogCQljYXNlIE9ORU5BTkRfQ01EX1JFQURPT0I6Ci0JCQlkYXRhcmFtID0gT05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcyk7Ci0JCQlyZWFkY21kID0gMTsKKwkJCWlmIChPTkVOQU5EX0lTX01MQyh0aGlzKSkKKwkJCQlkYXRhcmFtID0gT05FTkFORF9TRVRfQlVGRkVSUkFNMCh0aGlzKTsKKwkJCWVsc2UKKwkJCQlkYXRhcmFtID0gT05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcyk7CisKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CkBAIC0yOTIsNiArNDI2LDI5IEBACiB9CiAKIC8qKgorICogb25lbmFuZF9yZWFkX2VjYyAtIHJldHVybiBlY2Mgc3RhdHVzCisgKiBAcGFyYW0gdGhpcwkJb25lbmFuZCBjaGlwIHN0cnVjdHVyZQorICovCitzdGF0aWMgaW50IG9uZW5hbmRfcmVhZF9lY2Moc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcykKK3sKKwlpbnQgZWNjLCBpOworCisJaWYgKCFGTEVYT05FTkFORCh0aGlzKSkKKwkJcmV0dXJuIHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfRUNDX1NUQVRVUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWVjYyA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlCisJCQkJKyAoKE9ORU5BTkRfUkVHX0VDQ19TVEFUVVMgKyBpKSA8PCAxKSk7CisJCWlmIChsaWtlbHkoIWVjYykpCisJCQljb250aW51ZTsKKwkJaWYgKGVjYyAmIEZMRVhPTkVOQU5EX1VOQ09SUkVDVEFCTEVfRVJST1IpCisJCQlyZXR1cm4gT05FTkFORF9FQ0NfMkJJVF9BTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgogICogb25lbmFuZF93YWl0IC0gW0RFRkFVTFRdIHdhaXQgdW50aWwgdGhlIGNvbW1hbmQgaXMgZG9uZQogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSBzdGF0ZQkJc3RhdGUgdG8gc2VsZWN0IHRoZSBtYXguIHRpbWVvdXQgdmFsdWUKQEAgLTMwNSw3ICs0NjIsNyBAQAogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gT05FTkFORF9JTlRfTUFTVEVSOwogCXVuc2lnbmVkIGludCBpbnRlcnJ1cHQgPSAwOwotCXVuc2lnbmVkIGludCBjdHJsLCBlY2M7CisJdW5zaWduZWQgaW50IGN0cmw7CiAKIAl3aGlsZSAoMSkgewogCQlpbnRlcnJ1cHQgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CkBAIC0zMTUsNiArNDcyLDE0IEBACiAKIAljdHJsID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUyk7CiAKKwlpZiAoaW50ZXJydXB0ICYgT05FTkFORF9JTlRfUkVBRCkgeworCQlpbnQgZWNjID0gb25lbmFuZF9yZWFkX2VjYyh0aGlzKTsKKwkJaWYgKGVjYyAmIE9ORU5BTkRfRUNDXzJCSVRfQUxMKSB7CisJCQlwcmludGsoIm9uZW5hbmRfd2FpdDogRUNDIGVycm9yID0gMHglMDR4XG4iLCBlY2MpOworCQkJcmV0dXJuIC1FQkFETVNHOworCQl9CisJfQorCiAJaWYgKGN0cmwgJiBPTkVOQU5EX0NUUkxfRVJST1IpIHsKIAkJcHJpbnRrKCJvbmVuYW5kX3dhaXQ6IGNvbnRyb2xsZXIgZXJyb3IgPSAweCUwNHhcbiIsIGN0cmwpOwogCQlpZiAoY3RybCAmIE9ORU5BTkRfQ1RSTF9MT0NLKQpAQCAtMzI0LDE0ICs0ODksNiBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlpZiAoaW50ZXJydXB0ICYgT05FTkFORF9JTlRfUkVBRCkgewotCQllY2MgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0VDQ19TVEFUVVMpOwotCQlpZiAoZWNjICYgT05FTkFORF9FQ0NfMkJJVF9BTEwpIHsKLQkJCU1URERFQlVHIChNVERfREVCVUdfTEVWRUwwLAotCQkJCSAgIm9uZW5hbmRfd2FpdDogRUNDIGVycm9yID0gMHglMDR4XG4iLCBlY2MpOwotCQkJcmV0dXJuIC1FQkFETVNHOwotCQl9Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC00OTksNyArNjU2LDcgQEAKIAogCWlmIChmb3VuZCAmJiBPTkVOQU5EX0lTX0REUCh0aGlzKSkgewogCQkvKiBTZWxlY3QgRGF0YVJBTSBmb3IgRERQICovCi0JCWludCBibG9jayA9IChpbnQpIChhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KTsKKwkJaW50IGJsb2NrID0gb25lbmFuZF9ibG9jayh0aGlzLCBhZGRyKTsKIAkJaW50IHZhbHVlID0gb25lbmFuZF9idWZmZXJyYW1fYWRkcmVzcyh0aGlzLCBibG9jayk7CiAJCXRoaXMtPndyaXRlX3dvcmQodmFsdWUsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMik7CiAJfQpAQCAtNjMyLDYgKzc4OSw0NSBAQAogfQogCiAvKioKKyAqIG9uZW5hbmRfcmVjb3Zlcl9sc2IgLSBbRmxleC1PbmVOQU5EXSBSZWNvdmVyIExTQiBwYWdlIGRhdGEKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gYWRkcgkJYWRkcmVzcyB0byByZWNvdmVyCisgKiBAcGFyYW0gc3RhdHVzCXJldHVybiB2YWx1ZSBmcm9tIG9uZW5hbmRfd2FpdAorICoKKyAqIE1MQyBOQU5EIEZsYXNoIGNlbGwgaGFzIHBhaXJlZCBwYWdlcyAtIExTQiBwYWdlIGFuZCBNU0IgcGFnZS4gTFNCIHBhZ2UgaGFzCisgKiBsb3dlciBwYWdlIGFkZHJlc3MgYW5kIE1TQiBwYWdlIGhhcyBoaWdoZXIgcGFnZSBhZGRyZXNzIGluIHBhaXJlZCBwYWdlcy4KKyAqIElmIHBvd2VyIG9mZiBvY2N1cnMgZHVyaW5nIE1TQiBwYWdlIHByb2dyYW0sIHRoZSBwYWlyZWQgTFNCIHBhZ2UgZGF0YSBjYW4KKyAqIGJlY29tZSBjb3JydXB0LiBMU0IgcGFnZSByZWNvdmVyeSByZWFkIGlzIGEgd2F5IHRvIHJlYWQgTFNCIHBhZ2UgdGhvdWdoIHBhZ2UKKyAqIGRhdGEgYXJlIGNvcnJ1cHRlZC4gV2hlbiB1bmNvcnJlY3RhYmxlIGVycm9yIG9jY3VycyBhcyBhIHJlc3VsdCBvZiBMU0IgcGFnZQorICogcmVhZCBhZnRlciBwb3dlciB1cCwgaXNzdWUgTFNCIHBhZ2UgcmVjb3ZlcnkgcmVhZC4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX3JlY292ZXJfbHNiKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgYWRkciwgaW50IHN0YXR1cykKK3sKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCBpOworCisJLyogUmVjb3ZlcnkgaXMgb25seSBmb3IgRmxleC1PbmVOQU5EICovCisJaWYgKCFGTEVYT05FTkFORCh0aGlzKSkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIGNoZWNrIGlmIHdlIGZhaWxlZCBkdWUgdG8gdW5jb3JyZWN0YWJsZSBlcnJvciAqLworCWlmIChzdGF0dXMgIT0gLUVCQURNU0cgJiYgc3RhdHVzICE9IE9ORU5BTkRfQkJUX1JFQURfRUNDX0VSUk9SKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogY2hlY2sgaWYgYWRkcmVzcyBsaWVzIGluIE1MQyByZWdpb24gKi8KKwlpID0gZmxleG9uZW5hbmRfcmVnaW9uKG10ZCwgYWRkcik7CisJaWYgKG10ZC0+ZXJhc2VyZWdpb25zW2ldLmVyYXNlc2l6ZSA8ICgxIDw8IHRoaXMtPmVyYXNlX3NoaWZ0KSkKKwkJcmV0dXJuIHN0YXR1czsKKworCXByaW50aygib25lbmFuZF9yZWNvdmVyX2xzYjoiCisJCSJBdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSB1bmNvcnJlY3RhYmxlIHJlYWRcbiIpOworCisJLyogSXNzdWUgdGhlIExTQiBwYWdlIHJlY292ZXJ5IGNvbW1hbmQgKi8KKwl0aGlzLT5jb21tYW5kKG10ZCwgRkxFWE9ORU5BTkRfQ01EX1JFQ09WRVJfTFNCLCBhZGRyLCB0aGlzLT53cml0ZXNpemUpOworCXJldHVybiB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7Cit9CisKKy8qKgogICogb25lbmFuZF9yZWFkX29wc19ub2xvY2sgLSBbT25lTkFORCBJbnRlcmZhY2VdIE9uZU5BTkQgcmVhZCBtYWluIGFuZC9vciBvdXQtb2YtYmFuZAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSBmcm9tCQlvZmZzZXQgdG8gcmVhZCBmcm9tCkBAIC02NzMsNiArODY5LDcgQEAKIAlzdGF0cyA9IG10ZC0+ZWNjX3N0YXRzOwogCiAJLyogUmVhZC13aGlsZS1sb2FkIG1ldGhvZCAqLworCS8qIE5vdGU6IFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgaW4gTUxDICovCiAKIAkvKiBEbyBmaXJzdCBsb2FkIHRvIGJ1ZmZlclJBTSAqLwogCWlmIChyZWFkIDwgbGVuKSB7CkBAIC02ODAsNiArODc3LDggQEAKIAkJCXRoaXMtPm1haW5fYnVmID0gYnVmOwogCQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQUQsIGZyb20sIHdyaXRlc2l6ZSk7CiAJCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CisJCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCQlyZXQgPSBvbmVuYW5kX3JlY292ZXJfbHNiKG10ZCwgZnJvbSwgcmV0KTsKIAkJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGZyb20sICFyZXQpOwogCQkJaWYgKHJldCA9PSAtRUJBRE1TRykKIAkJCQlyZXQgPSAwOwpAQCAtNjk0LDcgKzg5Myw3IEBACiAJd2hpbGUgKCFyZXQpIHsKIAkJLyogSWYgdGhlcmUgaXMgbW9yZSB0byBsb2FkIHRoZW4gc3RhcnQgbmV4dCBsb2FkICovCiAJCWZyb20gKz0gdGhpc2xlbjsKLQkJaWYgKHJlYWQgKyB0aGlzbGVuIDwgbGVuKSB7CisJCWlmICghT05FTkFORF9JU19NTEModGhpcykgJiYgcmVhZCArIHRoaXNsZW4gPCBsZW4pIHsKIAkJCXRoaXMtPm1haW5fYnVmID0gYnVmICsgdGhpc2xlbjsKIAkJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFELCBmcm9tLCB3cml0ZXNpemUpOwogCQkJLyoKQEAgLTcyOCw2ICs5MjcsMTYgQEAKIAkJCW9vYmNvbHVtbiA9IDA7CiAJCX0KIAorCQlpZiAoT05FTkFORF9JU19NTEModGhpcykgJiYgKHJlYWQgKyB0aGlzbGVuIDwgbGVuKSkgeworCQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQUQsIGZyb20sIHdyaXRlc2l6ZSk7CisJCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CisJCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCQlyZXQgPSBvbmVuYW5kX3JlY292ZXJfbHNiKG10ZCwgZnJvbSwgcmV0KTsKKwkJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGZyb20sICFyZXQpOworCQkJaWYgKHJldCA9PSAtRUJBRE1TRykKKwkJCQlyZXQgPSAwOworCQl9CisKIAkJLyogU2VlIGlmIHdlIGFyZSBkb25lICovCiAJCXJlYWQgKz0gdGhpc2xlbjsKIAkJaWYgKHJlYWQgPT0gbGVuKQpAQCAtNzM1LDE2ICs5NDQsMTkgQEAKIAkJLyogU2V0IHVwIGZvciBuZXh0IHJlYWQgZnJvbSBidWZmZXJSQU0gKi8KIAkJaWYgKHVubGlrZWx5KGJvdW5kYXJ5KSkKIAkJCXRoaXMtPndyaXRlX3dvcmQoT05FTkFORF9ERFBfQ0hJUDEsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMik7Ci0JCU9ORU5BTkRfU0VUX05FWFRfQlVGRkVSUkFNKHRoaXMpOworCQlpZiAoIU9ORU5BTkRfSVNfTUxDKHRoaXMpKQorCQkJT05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcyk7CiAJCWJ1ZiArPSB0aGlzbGVuOwogCQl0aGlzbGVuID0gbWluX3QoaW50LCB3cml0ZXNpemUsIGxlbiAtIHJlYWQpOwogCQljb2x1bW4gPSAwOwogCi0JCS8qIE5vdyB3YWl0IGZvciBsb2FkICovCi0JCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9SRUFESU5HKTsKLQkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgZnJvbSwgIXJldCk7Ci0JCWlmIChyZXQgPT0gLUVCQURNU0cpCi0JCQlyZXQgPSAwOworCQlpZiAoIU9ORU5BTkRfSVNfTUxDKHRoaXMpKSB7CisJCQkvKiBOb3cgd2FpdCBmb3IgbG9hZCAqLworCQkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOworCQkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgZnJvbSwgIXJldCk7CisJCQlpZiAocmV0ID09IC1FQkFETVNHKQorCQkJCXJldCA9IDA7CisJCX0KIAl9CiAKIAkvKgpAQCAtNzgxLDcgKzk5Myw3IEBACiAJc2l6ZV90IGxlbiA9IG9wcy0+b29ibGVuOwogCW10ZF9vb2JfbW9kZV90IG1vZGUgPSBvcHMtPm1vZGU7CiAJdV9jaGFyICpidWYgPSBvcHMtPm9vYmJ1ZjsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMCwgcmVhZGNtZDsKIAogCWZyb20gKz0gb3BzLT5vb2JvZmZzOwogCkBAIC04MTIsMTYgKzEwMjQsMjEgQEAKIAogCXN0YXRzID0gbXRkLT5lY2Nfc3RhdHM7CiAKKwlyZWFkY21kID0gT05FTkFORF9JU19NTEModGhpcykgPyBPTkVOQU5EX0NNRF9SRUFEIDogT05FTkFORF9DTURfUkVBRE9PQjsKKwogCXdoaWxlIChyZWFkIDwgbGVuKSB7CiAJCXRoaXNsZW4gPSBvb2JzaXplIC0gY29sdW1uOwogCQl0aGlzbGVuID0gbWluX3QoaW50LCB0aGlzbGVuLCBsZW4pOwogCiAJCXRoaXMtPnNwYXJlX2J1ZiA9IGJ1ZjsKLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQURPT0IsIGZyb20sIG10ZC0+b29ic2l6ZSk7CisJCXRoaXMtPmNvbW1hbmQobXRkLCByZWFkY21kLCBmcm9tLCBtdGQtPm9vYnNpemUpOwogCiAJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGZyb20sIDApOwogCiAJCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9SRUFESU5HKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlyZXQgPSBvbmVuYW5kX3JlY292ZXJfbHNiKG10ZCwgZnJvbSwgcmV0KTsKKwogCQlpZiAocmV0ICYmIHJldCAhPSAtRUJBRE1TRykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX3JlYWRfb29iX25vbG9jazogcmVhZCBmYWlsZWQgPSAweCV4XG4iLCByZXQpOwogCQkJYnJlYWs7CkBAIC05NDUsOSArMTE2MiwxMiBAQAogCWN0cmwgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsKIAogCWlmIChpbnRlcnJ1cHQgJiBPTkVOQU5EX0lOVF9SRUFEKSB7Ci0JCWludCBlY2MgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0VDQ19TVEFUVVMpOwotCQlpZiAoZWNjICYgT05FTkFORF9FQ0NfMkJJVF9BTEwpCisJCWludCBlY2MgPSBvbmVuYW5kX3JlYWRfZWNjKHRoaXMpOworCQlpZiAoZWNjICYgT05FTkFORF9FQ0NfMkJJVF9BTEwpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIm9uZW5hbmRfYmJ0X3dhaXQ6IGVjYyBlcnJvciA9IDB4JTA0eCIKKwkJCQkiLCBjb250cm9sbGVyID0gMHglMDR4XG4iLCBlY2MsIGN0cmwpOwogCQkJcmV0dXJuIE9ORU5BTkRfQkJUX1JFQURfRVJST1I7CisJCX0KIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfYmJ0X3dhaXQ6IHJlYWQgdGltZW91dCEiCiAJCQkJImN0cmw9MHglMDR4IGludHI9MHglMDR4XG4iLCBjdHJsLCBpbnRlcnJ1cHQpOwpAQCAtOTc2LDEyICsxMTk2LDE0IEBACiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgcmVhZCA9IDAsIHRoaXNsZW4sIGNvbHVtbjsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMCwgcmVhZGNtZDsKIAlzaXplX3QgbGVuID0gb3BzLT5vb2JsZW47CiAJdV9jaGFyICpidWYgPSBvcHMtPm9vYmJ1ZjsKIAogCU1URERFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX2JidF9yZWFkX29vYjogZnJvbSA9IDB4JTA4eCwgbGVuID0gJXppXG4iLCAodW5zaWduZWQgaW50KSBmcm9tLCBsZW4pOwogCisJcmVhZGNtZCA9IE9ORU5BTkRfSVNfTUxDKHRoaXMpID8gT05FTkFORF9DTURfUkVBRCA6IE9ORU5BTkRfQ01EX1JFQURPT0I7CisKIAkvKiBJbml0aWFsaXplIHJldHVybiB2YWx1ZSAqLwogCW9wcy0+b29icmV0bGVuID0gMDsKIApAQCAtMTAwMiwxMSArMTIyNCwxNCBAQAogCQl0aGlzbGVuID0gbWluX3QoaW50LCB0aGlzbGVuLCBsZW4pOwogCiAJCXRoaXMtPnNwYXJlX2J1ZiA9IGJ1ZjsKLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQURPT0IsIGZyb20sIG10ZC0+b29ic2l6ZSk7CisJCXRoaXMtPmNvbW1hbmQobXRkLCByZWFkY21kLCBmcm9tLCBtdGQtPm9vYnNpemUpOwogCiAJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGZyb20sIDApOwogCiAJCXJldCA9IHRoaXMtPmJidF93YWl0KG10ZCwgRkxfUkVBRElORyk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0ID0gb25lbmFuZF9yZWNvdmVyX2xzYihtdGQsIGZyb20sIHJldCk7CisKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCkBAIC0xMDQ0LDkgKzEyNjksMTEgQEAKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXVfY2hhciAqb29iX2J1ZiA9IHRoaXMtPm9vYl9idWY7Ci0JaW50IHN0YXR1cywgaTsKKwlpbnQgc3RhdHVzLCBpLCByZWFkY21kOwogCi0JdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQURPT0IsIHRvLCBtdGQtPm9vYnNpemUpOworCXJlYWRjbWQgPSBPTkVOQU5EX0lTX01MQyh0aGlzKSA/IE9ORU5BTkRfQ01EX1JFQUQgOiBPTkVOQU5EX0NNRF9SRUFET09COworCisJdGhpcy0+Y29tbWFuZChtdGQsIHJlYWRjbWQsIHRvLCBtdGQtPm9vYnNpemUpOwogCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIHRvLCAwKTsKIAlzdGF0dXMgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CiAJaWYgKHN0YXR1cykKQEAgLTEyOTEsNyArMTUxOCw3IEBACiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgY29sdW1uLCByZXQgPSAwLCBvb2JzaXplOwotCWludCB3cml0dGVuID0gMDsKKwlpbnQgd3JpdHRlbiA9IDAsIG9vYmNtZDsKIAl1X2NoYXIgKm9vYmJ1ZjsKIAlzaXplX3QgbGVuID0gb3BzLT5vb2JsZW47CiAJY29uc3QgdV9jaGFyICpidWYgPSBvcHMtPm9vYmJ1ZjsKQEAgLTEzMzMsNiArMTU2MCw4IEBACiAKIAlvb2JidWYgPSB0aGlzLT5vb2JfYnVmOwogCisJb29iY21kID0gT05FTkFORF9JU19NTEModGhpcykgPyBPTkVOQU5EX0NNRF9QUk9HIDogT05FTkFORF9DTURfUFJPR09PQjsKKwogCS8qIExvb3AgdW50aWwgYWxsIGRhdGEgd3JpdGUgKi8KIAl3aGlsZSAod3JpdHRlbiA8IGxlbikgewogCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgb29ic2l6ZSwgbGVuIC0gd3JpdHRlbik7CkBAIC0xMzQ4LDcgKzE1NzcsMTQgQEAKIAkJCW1lbWNweShvb2JidWYgKyBjb2x1bW4sIGJ1ZiwgdGhpc2xlbik7CiAJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIDAsIE9ORU5BTkRfU1BBUkVSQU0sIG9vYmJ1ZiwgMCwgbXRkLT5vb2JzaXplKTsKIAorCQlpZiAoT05FTkFORF9JU19NTEModGhpcykpIHsKKwkJCS8qIFNldCBtYWluIGFyZWEgb2YgRGF0YVJBTSB0byAweGZmKi8KKwkJCW1lbXNldCh0aGlzLT5wYWdlX2J1ZiwgMHhmZiwgbXRkLT53cml0ZXNpemUpOworCQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgMCwgT05FTkFORF9EQVRBUkFNLAorCQkJCXRoaXMtPnBhZ2VfYnVmLAkwLCBtdGQtPndyaXRlc2l6ZSk7CisJCX0KKwotCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUFJPR09PQiwgdG8sIG10ZC0+b29ic2l6ZSk7CisJCXRoaXMtPmNvbW1hbmQobXRkLCBvb2JjbWQsIHRvLCBtdGQtPm9vYnNpemUpOwogCiAJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIHRvLCAwKTsKIAkJaWYgKE9ORU5BTkRfSVNfMlBMQU5FKHRoaXMpKSB7CkBAIC0xNDc1LDM0ICsxNzExLDU0IEBACiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAl1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZTsKLQlsb2ZmX3QgYWRkcjsKLQlpbnQgbGVuOwotCWludCByZXQgPSAwOworCWxvZmZfdCBhZGRyID0gaW5zdHItPmFkZHI7CisJdW5zaWduZWQgaW50IGxlbiA9IGluc3RyLT5sZW47CisJaW50IHJldCA9IDAsIGk7CisJc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyAqcmVnaW9uID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgcmVnaW9uX2VuZCA9IDA7CiAKLQlNVERERUJVRyAoTVREX0RFQlVHX0xFVkVMMywKLQkJICJvbmVuYW5kX2VyYXNlOiBzdGFydCA9IDB4JTA4eCwgbGVuID0gJWlcbiIsCi0JCSAodW5zaWduZWQgaW50KWluc3RyLT5hZGRyLCAodW5zaWduZWQgaW50KWluc3RyLT5sZW4pOworCU1URERFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX2VyYXNlOiBzdGFydCA9IDB4JTA4eCwgbGVuID0gJWlcbiIsCisJCQkodW5zaWduZWQgaW50KSBhZGRyLCBsZW4pOwogCi0JYmxvY2tfc2l6ZSA9ICgxIDw8IHRoaXMtPmVyYXNlX3NoaWZ0KTsKLQotCS8qIFN0YXJ0IGFkZHJlc3MgbXVzdCBhbGlnbiBvbiBibG9jayBib3VuZGFyeSAqLwotCWlmICh1bmxpa2VseShpbnN0ci0+YWRkciAmIChibG9ja19zaXplIC0gMSkpKSB7Ci0JCU1URERFQlVHIChNVERfREVCVUdfTEVWRUwwLAotCQkJICJvbmVuYW5kX2VyYXNlOiBVbmFsaWduZWQgYWRkcmVzc1xuIik7CisJLyogRG8gbm90IGFsbG93IGVyYXNlIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmICh1bmxpa2VseSgobGVuICsgYWRkcikgPiBtdGQtPnNpemUpKSB7CisJCU1URERFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX2VyYXNlOiIKKwkJCQkJIkVyYXNlIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIExlbmd0aCBtdXN0IGFsaWduIG9uIGJsb2NrIGJvdW5kYXJ5ICovCi0JaWYgKHVubGlrZWx5KGluc3RyLT5sZW4gJiAoYmxvY2tfc2l6ZSAtIDEpKSkgewotCQlNVERERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwKLQkJCSAib25lbmFuZF9lcmFzZTogTGVuZ3RoIG5vdCBibG9jayBhbGlnbmVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKEZMRVhPTkVOQU5EKHRoaXMpKSB7CisJCS8qIEZpbmQgdGhlIGVyYXNlcmVnaW9uIG9mIHRoaXMgYWRkcmVzcyAqLworCQlpID0gZmxleG9uZW5hbmRfcmVnaW9uKG10ZCwgYWRkcik7CisJCXJlZ2lvbiA9ICZtdGQtPmVyYXNlcmVnaW9uc1tpXTsKKworCQlibG9ja19zaXplID0gcmVnaW9uLT5lcmFzZXNpemU7CisJCXJlZ2lvbl9lbmQgPSByZWdpb24tPm9mZnNldAorCQkJKyByZWdpb24tPmVyYXNlc2l6ZSAqIHJlZ2lvbi0+bnVtYmxvY2tzOworCisJCS8qIFN0YXJ0IGFkZHJlc3Mgd2l0aGluIHJlZ2lvbiBtdXN0IGFsaWduIG9uIGJsb2NrIGJvdW5kYXJ5LgorCQkgKiBFcmFzZSByZWdpb24ncyBzdGFydCBvZmZzZXQgaXMgYWx3YXlzIGJsb2NrIHN0YXJ0IGFkZHJlc3MuCisJCSAqLworCQlpZiAodW5saWtlbHkoKGFkZHIgLSByZWdpb24tPm9mZnNldCkgJiAoYmxvY2tfc2l6ZSAtIDEpKSkgeworCQkJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfZXJhc2U6IgorCQkJCSIgVW5hbGlnbmVkIGFkZHJlc3NcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlibG9ja19zaXplID0gMSA8PCB0aGlzLT5lcmFzZV9zaGlmdDsKKworCQkvKiBTdGFydCBhZGRyZXNzIG11c3QgYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgKi8KKwkJaWYgKHVubGlrZWx5KGFkZHIgJiAoYmxvY2tfc2l6ZSAtIDEpKSkgeworCQkJTVREREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfZXJhc2U6IgorCQkJCQkJIlVuYWxpZ25lZCBhZGRyZXNzXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCi0JLyogRG8gbm90IGFsbG93IGVyYXNlIHBhc3QgZW5kIG9mIGRldmljZSAqLwotCWlmICh1bmxpa2VseSgoaW5zdHItPmxlbiArIGluc3RyLT5hZGRyKSA+IG10ZC0+c2l6ZSkpIHsKKwkvKiBMZW5ndGggbXVzdCBhbGlnbiBvbiBibG9jayBib3VuZGFyeSAqLworCWlmICh1bmxpa2VseShsZW4gJiAoYmxvY2tfc2l6ZSAtIDEpKSkgewogCQlNVERERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwKLQkJCSAib25lbmFuZF9lcmFzZTogRXJhc2UgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJCSAib25lbmFuZF9lcmFzZTogTGVuZ3RoIG5vdCBibG9jayBhbGlnbmVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNTEyLDkgKzE3NjgsNiBAQAogCW9uZW5hbmRfZ2V0X2RldmljZShtdGQsIEZMX0VSQVNJTkcpOwogCiAJLyogTG9vcCB0aHJvdWdodCB0aGUgcGFnZXMgKi8KLQlsZW4gPSBpbnN0ci0+bGVuOwotCWFkZHIgPSBpbnN0ci0+YWRkcjsKLQogCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTSU5HOwogCiAJd2hpbGUgKGxlbikgewpAQCAtMTU0MSwxNCArMTc5NCw3IEBACiAJCQllbHNlCiAJCQkJTVREREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX2VyYXNlOiAiCiAJCQkJCSAgIkZhaWxlZCBlcmFzZSwgYmxvY2sgJWRcbiIsCi0JCQkJCSAgKHVuc2lnbmVkKShhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KSk7Ci0JCQlpZiAocmV0ID09IC1FUEVSTSkKLQkJCQlwcmludGsoIm9uZW5hbmRfZXJhc2U6ICIKLQkJCQkJICAiRGV2aWNlIGlzIHdyaXRlIHByb3RlY3RlZCEhIVxuIik7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKCJvbmVuYW5kX2VyYXNlOiAiCi0JCQkJCSAgIkZhaWxlZCBlcmFzZSwgYmxvY2sgJWRcbiIsCi0JCQkJCSAgKHVuc2lnbmVkKShhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KSk7CisJCQkJCW9uZW5hbmRfYmxvY2sodGhpcywgYWRkcikpOwogCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKIAkJCWluc3RyLT5mYWlsX2FkZHIgPSBhZGRyOwogCkBAIC0xNTU3LDYgKzE4MDMsMjMgQEAKIAogCQlsZW4gLT0gYmxvY2tfc2l6ZTsKIAkJYWRkciArPSBibG9ja19zaXplOworCisJCWlmIChhZGRyID09IHJlZ2lvbl9lbmQpIHsKKwkJCWlmICghbGVuKQorCQkJCWJyZWFrOworCQkJcmVnaW9uKys7CisKKwkJCWJsb2NrX3NpemUgPSByZWdpb24tPmVyYXNlc2l6ZTsKKwkJCXJlZ2lvbl9lbmQgPSByZWdpb24tPm9mZnNldAorCQkJCSsgcmVnaW9uLT5lcmFzZXNpemUgKiByZWdpb24tPm51bWJsb2NrczsKKworCQkJaWYgKGxlbiAmIChibG9ja19zaXplIC0gMSkpIHsKKwkJCQkvKiBUaGlzIGhhcyBiZWVuIGNoZWNrZWQgYXQgTVRECisJCQkJICogcGFydGl0aW9uaW5nIGxldmVsLiAqLworCQkJCXByaW50aygib25lbmFuZF9lcmFzZTogVW5hbGlnbmVkIGFkZHJlc3NcbiIpOworCQkJCWdvdG8gZXJhc2VfZXhpdDsKKwkJCX0KKwkJfQogCX0KIAogCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9ET05FOwpAQCAtMTYzNCw3ICsxODk3LDcgQEAKIAlpbnQgYmxvY2s7CiAKIAkvKiBHZXQgYmxvY2sgbnVtYmVyICovCi0JYmxvY2sgPSAoKGludCkgb2ZzKSA+PiBiYm0tPmJidF9lcmFzZV9zaGlmdDsKKwlibG9jayA9IG9uZW5hbmRfYmxvY2sodGhpcywgb2ZzKTsKIAlpZiAoYmJtLT5iYnQpCiAJCWJibS0+YmJ0W2Jsb2NrID4+IDJdIHw9IDB4MDEgPDwgKChibG9jayAmIDB4MDMpIDw8IDEpOwogCkBAIC0xNjgyLDggKzE5NDUsOCBAQAogCWludCBzdGFydCwgZW5kLCBibG9jaywgdmFsdWUsIHN0YXR1czsKIAlpbnQgd3Bfc3RhdHVzX21hc2s7CiAKLQlzdGFydCA9IG9mcyA+PiB0aGlzLT5lcmFzZV9zaGlmdDsKLQllbmQgPSBsZW4gPj4gdGhpcy0+ZXJhc2Vfc2hpZnQ7CisJc3RhcnQgPSBvbmVuYW5kX2Jsb2NrKHRoaXMsIG9mcyk7CisJZW5kID0gb25lbmFuZF9ibG9jayh0aGlzLCBvZnMgKyBsZW4pOwogCiAJaWYgKGNtZCA9PSBPTkVOQU5EX0NNRF9MT0NLKQogCQl3cF9zdGF0dXNfbWFzayA9IE9ORU5BTkRfV1BfTFM7CkBAIC0xNzE4LDcgKzE5ODEsNyBAQAogCX0KIAogCS8qIEJsb2NrIGxvY2sgc2NoZW1lICovCi0JZm9yIChibG9jayA9IHN0YXJ0OyBibG9jayA8IHN0YXJ0ICsgZW5kOyBibG9jaysrKSB7CisJZm9yIChibG9jayA9IHN0YXJ0OyBibG9jayA8IGVuZDsgYmxvY2srKykgewogCQkvKiBTZXQgYmxvY2sgYWRkcmVzcyAqLwogCQl2YWx1ZSA9IG9uZW5hbmRfYmxvY2tfYWRkcmVzcyh0aGlzLCBibG9jayk7CiAJCXRoaXMtPndyaXRlX3dvcmQodmFsdWUsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTMSk7CkBAIC0xODMxLDcgKzIwOTQsNyBAQAogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJbG9mZl90IG9mcyA9IDA7Ci0Jc2l6ZV90IGxlbiA9IHRoaXMtPmNoaXBzaXplOworCXNpemVfdCBsZW4gPSBtdGQtPnNpemU7CiAKIAlpZiAodGhpcy0+b3B0aW9ucyAmIE9ORU5BTkRfSEFTX1VOTE9DS19BTEwpIHsKIAkJLyogU2V0IHN0YXJ0IGJsb2NrIGFkZHJlc3MgKi8KQEAgLTE4NDcsMTQgKzIxMTAsMTIgQEAKIAkJCQkmIE9ORU5BTkRfQ1RSTF9PTkdPKQogCQkJY29udGludWU7CiAKLQkJcmV0dXJuOwotCiAJCS8qIENoZWNrIGxvY2sgc3RhdHVzICovCiAJCWlmIChvbmVuYW5kX2NoZWNrX2xvY2tfc3RhdHVzKHRoaXMpKQogCQkJcmV0dXJuOwogCiAJCS8qIFdvcmthcm91bmQgZm9yIGFsbCBibG9jayB1bmxvY2sgaW4gRERQICovCi0JCWlmIChPTkVOQU5EX0lTX0REUCh0aGlzKSkgeworCQlpZiAoT05FTkFORF9JU19ERFAodGhpcykgJiYgIUZMRVhPTkVOQU5EKHRoaXMpKSB7CiAJCQkvKiBBbGwgYmxvY2tzIG9uIGFub3RoZXIgY2hpcCAqLwogCQkJb2ZzID0gdGhpcy0+Y2hpcHNpemUgPj4gMTsKIAkJCWxlbiA9IHRoaXMtPmNoaXBzaXplID4+IDE7CkBAIC0xOTA2LDYgKzIxNjcsMTQgQEAKIAkJYnJlYWs7CiAJfQogCisJaWYgKE9ORU5BTkRfSVNfTUxDKHRoaXMpKQorCQl0aGlzLT5vcHRpb25zICY9IH5PTkVOQU5EX0hBU18yUExBTkU7CisKKwlpZiAoRkxFWE9ORU5BTkQodGhpcykpIHsKKwkJdGhpcy0+b3B0aW9ucyAmPSB+T05FTkFORF9IQVNfQ09OVF9MT0NLOworCQl0aGlzLT5vcHRpb25zIHw9IE9ORU5BTkRfSEFTX1VOTE9DS19BTEw7CisJfQorCiAJaWYgKHRoaXMtPm9wdGlvbnMgJiBPTkVOQU5EX0hBU19DT05UX0xPQ0spCiAJCXByaW50ayhLRVJOX0RFQlVHICJMb2NrIHNjaGVtZSBpcyBDb250aW51b3VzIExvY2tcbiIpOwogCWlmICh0aGlzLT5vcHRpb25zICYgT05FTkFORF9IQVNfVU5MT0NLX0FMTCkKQEAgLTE5MjIsMTYgKzIxOTEsMTggQEAKICAqLwogY2hhciAqb25lbmFuZF9wcmludF9kZXZpY2VfaW5mbyhpbnQgZGV2aWNlLCBpbnQgdmVyc2lvbikKIHsKLQlpbnQgdmNjLCBkZW11eGVkLCBkZHAsIGRlbnNpdHk7CisJaW50IHZjYywgZGVtdXhlZCwgZGRwLCBkZW5zaXR5LCBmbGV4b25lbmFuZDsKIAljaGFyICpkZXZfaW5mbyA9IG1hbGxvYyg4MCk7CiAJY2hhciAqcCA9IGRldl9pbmZvOwogCiAJdmNjID0gZGV2aWNlICYgT05FTkFORF9ERVZJQ0VfVkNDX01BU0s7CiAJZGVtdXhlZCA9IGRldmljZSAmIE9ORU5BTkRfREVWSUNFX0lTX0RFTVVYOwogCWRkcCA9IGRldmljZSAmIE9ORU5BTkRfREVWSUNFX0lTX0REUDsKLQlkZW5zaXR5ID0gZGV2aWNlID4+IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfU0hJRlQ7Ci0JcCArPSBzcHJpbnRmKGRldl9pbmZvLCAiJXNPbmVOQU5EJXMgJWRNQiAlc1YgMTYtYml0ICgweCUwMngpIiwKKwlkZW5zaXR5ID0gb25lbmFuZF9nZXRfZGVuc2l0eShkZXZpY2UpOworCWZsZXhvbmVuYW5kID0gZGV2aWNlICYgREVWSUNFX0lTX0ZMRVhPTkVOQU5EOworCXAgKz0gc3ByaW50ZihkZXZfaW5mbywgIiVzJXNPbmVOQU5EJXMgJWRNQiAlc1YgMTYtYml0ICgweCUwMngpIiwKIAkgICAgICAgZGVtdXhlZCA/ICIiIDogIk11eGVkICIsCisJICAgICAgIGZsZXhvbmVuYW5kID8gIkZsZXgtIiA6ICIiLAogCSAgICAgICBkZHAgPyAiKEREUCkiIDogIiIsCiAJICAgICAgICgxNiA8PCBkZW5zaXR5KSwgdmNjID8gIjIuNjUvMy4zIiA6ICIxLjgiLCBkZXZpY2UpOwogCkBAIC0xOTU3LDcgKzIyMjgsNyBAQAogCWNoYXIgKm5hbWU7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBzaXplOyBpKyspCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKIAkJaWYgKG1hbnVmID09IG9uZW5hbmRfbWFudWZfaWRzW2ldLmlkKQogCQkJYnJlYWs7CiAKQEAgLTE5NzQsNiArMjI0NSwyNjUgQEAKIH0KIAogLyoqCisqIGZsZXhvbmVuYW5kX2dldF9ib3VuZGFyeQktIFJlYWRzIHRoZSBTTEMgYm91bmRhcnkKKyogQHBhcmFtIG9uZW5hbmRfaW5mbwkJLSBvbmVuYW5kIGluZm8gc3RydWN0dXJlCisqCisqIEZpbGwgdXAgYm91bmRhcnlbXSBmaWVsZCBpbiBvbmVuYW5kX2NoaXAKKyoqLworc3RhdGljIGludCBmbGV4b25lbmFuZF9nZXRfYm91bmRhcnkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgZGllLCBiZHJ5OworCWludCByZXQsIHN5c2NmZywgbG9ja2VkOworCisJLyogRGlzYWJsZSBFQ0MgKi8KKwlzeXNjZmcgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKwl0aGlzLT53cml0ZV93b3JkKChzeXNjZmcgfCAweDAxMDApLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1lTX0NGRzEpOworCisJZm9yIChkaWUgPSAwOyBkaWUgPCB0aGlzLT5kaWVzOyBkaWUrKykgeworCQl0aGlzLT5jb21tYW5kKG10ZCwgRkxFWE9ORU5BTkRfQ01EX1BJX0FDQ0VTUywgZGllLCAwKTsKKwkJdGhpcy0+d2FpdChtdGQsIEZMX1NZTkNJTkcpOworCisJCXRoaXMtPmNvbW1hbmQobXRkLCBGTEVYT05FTkFORF9DTURfUkVBRF9QSSwgZGllLCAwKTsKKwkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOworCisJCWJkcnkgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfREFUQVJBTSk7CisJCWlmICgoYmRyeSA+PiBGTEVYT05FTkFORF9QSV9VTkxPQ0tfU0hJRlQpID09IDMpCisJCQlsb2NrZWQgPSAwOworCQllbHNlCisJCQlsb2NrZWQgPSAxOworCQl0aGlzLT5ib3VuZGFyeVtkaWVdID0gYmRyeSAmIEZMRVhPTkVOQU5EX1BJX01BU0s7CisKKwkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsKKwkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFU0VUSU5HKTsKKworCQlwcmludGsoS0VSTl9JTkZPICJEaWUgJWQgYm91bmRhcnk6ICVkJXNcbiIsIGRpZSwKKwkJICAgICAgIHRoaXMtPmJvdW5kYXJ5W2RpZV0sIGxvY2tlZCA/ICIoTG9ja2VkKSIgOiAiKFVubG9ja2VkKSIpOworCX0KKworCS8qIEVuYWJsZSBFQ0MgKi8KKwl0aGlzLT53cml0ZV93b3JkKHN5c2NmZywgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NZU19DRkcxKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmbGV4b25lbmFuZF9nZXRfc2l6ZSAtIEZpbGwgdXAgZmllbGRzIGluIG9uZW5hbmRfY2hpcCBhbmQgbXRkX2luZm8KKyAqIAkJCSAgYm91bmRhcnlbXSwgZGllc2l6ZVtdLCBtdGQtPnNpemUsIG10ZC0+ZXJhc2VzaXplLAorICogCQkJICBtdGQtPmVyYXNlcmVnaW9ucworICogQHBhcmFtIG10ZAkJLSBNVEQgZGV2aWNlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBmbGV4b25lbmFuZF9nZXRfc2l6ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCBkaWUsIGksIGVyYXNlc2hpZnQsIGRlbnNpdHk7CisJaW50IGJsa3NwZXJkaWUsIG1heGJkcnk7CisJbG9mZl90IG9mczsKKworCWRlbnNpdHkgPSBvbmVuYW5kX2dldF9kZW5zaXR5KHRoaXMtPmRldmljZV9pZCk7CisJYmxrc3BlcmRpZSA9ICgobG9mZl90KSgxNiA8PCBkZW5zaXR5KSA8PCAyMCkgPj4gKHRoaXMtPmVyYXNlX3NoaWZ0KTsKKwlibGtzcGVyZGllID4+PSBPTkVOQU5EX0lTX0REUCh0aGlzKSA/IDEgOiAwOworCW1heGJkcnkgPSBibGtzcGVyZGllIC0gMTsKKwllcmFzZXNoaWZ0ID0gdGhpcy0+ZXJhc2Vfc2hpZnQgLSAxOworCisJbXRkLT5udW1lcmFzZXJlZ2lvbnMgPSB0aGlzLT5kaWVzIDw8IDE7CisKKwkvKiBUaGlzIGZpbGxzIHVwIHRoZSBkZXZpY2UgYm91bmRhcnkgKi8KKwlmbGV4b25lbmFuZF9nZXRfYm91bmRhcnkobXRkKTsKKwlkaWUgPSAwOworCW9mcyA9IDA7CisJaSA9IC0xOworCWZvciAoOyBkaWUgPCB0aGlzLT5kaWVzOyBkaWUrKykgeworCQlpZiAoIWRpZSB8fCB0aGlzLT5ib3VuZGFyeVtkaWUtMV0gIT0gbWF4YmRyeSkgeworCQkJaSsrOworCQkJbXRkLT5lcmFzZXJlZ2lvbnNbaV0ub2Zmc2V0ID0gb2ZzOworCQkJbXRkLT5lcmFzZXJlZ2lvbnNbaV0uZXJhc2VzaXplID0gMSA8PCBlcmFzZXNoaWZ0OworCQkJbXRkLT5lcmFzZXJlZ2lvbnNbaV0ubnVtYmxvY2tzID0KKwkJCQkJCQl0aGlzLT5ib3VuZGFyeVtkaWVdICsgMTsKKwkJCW9mcyArPSBtdGQtPmVyYXNlcmVnaW9uc1tpXS5udW1ibG9ja3MgPDwgZXJhc2VzaGlmdDsKKwkJCWVyYXNlc2hpZnQrKzsKKwkJfSBlbHNlIHsKKwkJCW10ZC0+bnVtZXJhc2VyZWdpb25zIC09IDE7CisJCQltdGQtPmVyYXNlcmVnaW9uc1tpXS5udW1ibG9ja3MgKz0KKwkJCQkJCQl0aGlzLT5ib3VuZGFyeVtkaWVdICsgMTsKKwkJCW9mcyArPSAodGhpcy0+Ym91bmRhcnlbZGllXSArIDEpIDw8IChlcmFzZXNoaWZ0IC0gMSk7CisJCX0KKwkJaWYgKHRoaXMtPmJvdW5kYXJ5W2RpZV0gIT0gbWF4YmRyeSkgeworCQkJaSsrOworCQkJbXRkLT5lcmFzZXJlZ2lvbnNbaV0ub2Zmc2V0ID0gb2ZzOworCQkJbXRkLT5lcmFzZXJlZ2lvbnNbaV0uZXJhc2VzaXplID0gMSA8PCBlcmFzZXNoaWZ0OworCQkJbXRkLT5lcmFzZXJlZ2lvbnNbaV0ubnVtYmxvY2tzID0gbWF4YmRyeSBeCisJCQkJCQkJIHRoaXMtPmJvdW5kYXJ5W2RpZV07CisJCQlvZnMgKz0gbXRkLT5lcmFzZXJlZ2lvbnNbaV0ubnVtYmxvY2tzIDw8IGVyYXNlc2hpZnQ7CisJCQllcmFzZXNoaWZ0LS07CisJCX0gZWxzZQorCQkJbXRkLT5udW1lcmFzZXJlZ2lvbnMgLT0gMTsKKwl9CisKKwkvKiBFeHBvc2UgTUxDIGVyYXNlIHNpemUgZXhjZXB0IHdoZW4gYWxsIGJsb2NrcyBhcmUgU0xDICovCisJbXRkLT5lcmFzZXNpemUgPSAxIDw8IHRoaXMtPmVyYXNlX3NoaWZ0OworCWlmIChtdGQtPm51bWVyYXNlcmVnaW9ucyA9PSAxKQorCQltdGQtPmVyYXNlc2l6ZSA+Pj0gMTsKKworCXByaW50ayhLRVJOX0lORk8gIkRldmljZSBoYXMgJWQgZXJhc2VyZWdpb25zXG4iLCBtdGQtPm51bWVyYXNlcmVnaW9ucyk7CisJZm9yIChpID0gMDsgaSA8IG10ZC0+bnVtZXJhc2VyZWdpb25zOyBpKyspCisJCXByaW50ayhLRVJOX0lORk8gIltvZmZzZXQ6IDB4JTA4bGx4LCBlcmFzZXNpemU6IDB4JTA1eCwiCisJCQkiIG51bWJsb2NrczogJTA0dV1cbiIsIG10ZC0+ZXJhc2VyZWdpb25zW2ldLm9mZnNldCwKKwkJCW10ZC0+ZXJhc2VyZWdpb25zW2ldLmVyYXNlc2l6ZSwKKwkJCW10ZC0+ZXJhc2VyZWdpb25zW2ldLm51bWJsb2Nrcyk7CisKKwlmb3IgKGRpZSA9IDAsIG10ZC0+c2l6ZSA9IDA7IGRpZSA8IHRoaXMtPmRpZXM7IGRpZSsrKSB7CisJCXRoaXMtPmRpZXNpemVbZGllXSA9IChsb2ZmX3QpIChibGtzcGVyZGllIDw8IHRoaXMtPmVyYXNlX3NoaWZ0KTsKKwkJdGhpcy0+ZGllc2l6ZVtkaWVdIC09IChsb2ZmX3QpICh0aGlzLT5ib3VuZGFyeVtkaWVdICsgMSkKKwkJCQkJCSA8PCAodGhpcy0+ZXJhc2Vfc2hpZnQgLSAxKTsKKwkJbXRkLT5zaXplICs9IHRoaXMtPmRpZXNpemVbZGllXTsKKwl9Cit9CisKKy8qKgorICogZmxleG9uZW5hbmRfY2hlY2tfYmxvY2tzX2VyYXNlZCAtIENoZWNrIGlmIGJsb2NrcyBhcmUgZXJhc2VkCisgKiBAcGFyYW0gbXRkX2luZm8JLSBtdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBzdGFydAkJLSBmaXJzdCBlcmFzZSBibG9jayB0byBjaGVjaworICogQHBhcmFtIGVuZAkJLSBsYXN0IGVyYXNlIGJsb2NrIHRvIGNoZWNrCisgKgorICogQ29udmVydGluZyBhbiB1bmVyYXNlZCBibG9jayBmcm9tIE1MQyB0byBTTEMKKyAqIGNhdXNlcyBieXRlIHZhbHVlcyB0byBjaGFuZ2UuIFNpbmNlIGJvdGggZGF0YSBhbmQgaXRzIEVDQworICogaGF2ZSBjaGFuZ2VkLCByZWFkcyBvbiB0aGUgYmxvY2sgZ2l2ZSB1bmNvcnJlY3RhYmxlIGVycm9yLgorICogVGhpcyBtaWdodCBsZWFkIHRvIHRoZSBibG9jayBiZWluZyBkZXRlY3RlZCBhcyBiYWQuCisgKgorICogQXZvaWQgdGhpcyBieSBlbnN1cmluZyB0aGF0IHRoZSBibG9jayB0byBiZSBjb252ZXJ0ZWQgaXMKKyAqIGVyYXNlZC4KKyAqLworc3RhdGljIGludCBmbGV4b25lbmFuZF9jaGVja19ibG9ja3NfZXJhc2VkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQlpbnQgc3RhcnQsIGludCBlbmQpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgaSwgcmV0OworCWludCBibG9jazsKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzID0geworCQkubW9kZSA9IE1URF9PT0JfUExBQ0UsCisJCS5vb2JvZmZzID0gMCwKKwkJLm9vYmxlbgk9IG10ZC0+b29ic2l6ZSwKKwkJLmRhdGJ1Zgk9IE5VTEwsCisJCS5vb2JidWYJPSB0aGlzLT5vb2JfYnVmLAorCX07CisJbG9mZl90IGFkZHI7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiQ2hlY2sgYmxvY2tzIGZyb20gJWQgdG8gJWRcbiIsIHN0YXJ0LCBlbmQpOworCisJZm9yIChibG9jayA9IHN0YXJ0OyBibG9jayA8PSBlbmQ7IGJsb2NrKyspIHsKKwkJYWRkciA9IGZsZXhvbmVuYW5kX2FkZHIodGhpcywgYmxvY2spOworCQlpZiAob25lbmFuZF9ibG9ja19pc2JhZF9ub2xvY2sobXRkLCBhZGRyLCAwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFNpbmNlIG1haW4gYXJlYSB3cml0ZSByZXN1bHRzIGluIEVDQyB3cml0ZSB0byBzcGFyZSwKKwkJICogaXQgaXMgc3VmZmljaWVudCB0byBjaGVjayBvbmx5IEVDQyBieXRlcyBmb3IgY2hhbmdlLgorCQkgKi8KKwkJcmV0ID0gb25lbmFuZF9yZWFkX29vYl9ub2xvY2sobXRkLCBhZGRyLCAmb3BzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJZm9yIChpID0gMDsgaSA8IG10ZC0+b29ic2l6ZTsgaSsrKQorCQkJaWYgKHRoaXMtPm9vYl9idWZbaV0gIT0gMHhmZikKKwkJCQlicmVhazsKKworCQlpZiAoaSAhPSBtdGQtPm9vYnNpemUpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJsb2NrICVkIG5vdCBlcmFzZWQuXG4iLCBibG9jayk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGZsZXhvbmVuYW5kX3NldF9ib3VuZGFyeQktIFdyaXRlcyB0aGUgU0xDIGJvdW5kYXJ5CisgKiBAcGFyYW0gbXRkCQkJLSBtdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqLworaW50IGZsZXhvbmVuYW5kX3NldF9ib3VuZGFyeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGRpZSwKKwkJCQkgICAgaW50IGJvdW5kYXJ5LCBpbnQgbG9jaykKK3sKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCByZXQsIGRlbnNpdHksIGJsa3NwZXJkaWUsIG9sZCwgbmV3LCB0aGlzYm91bmRhcnk7CisJbG9mZl90IGFkZHI7CisKKwlpZiAoZGllID49IHRoaXMtPmRpZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJvdW5kYXJ5ID09IHRoaXMtPmJvdW5kYXJ5W2RpZV0pCisJCXJldHVybiAwOworCisJZGVuc2l0eSA9IG9uZW5hbmRfZ2V0X2RlbnNpdHkodGhpcy0+ZGV2aWNlX2lkKTsKKwlibGtzcGVyZGllID0gKCgxNiA8PCBkZW5zaXR5KSA8PCAyMCkgPj4gdGhpcy0+ZXJhc2Vfc2hpZnQ7CisJYmxrc3BlcmRpZSA+Pj0gT05FTkFORF9JU19ERFAodGhpcykgPyAxIDogMDsKKworCWlmIChib3VuZGFyeSA+PSBibGtzcGVyZGllKSB7CisJCXByaW50aygiZmxleG9uZW5hbmRfc2V0X2JvdW5kYXJ5OiIKKwkJCSJJbnZhbGlkIGJvdW5kYXJ5IHZhbHVlLiAiCisJCQkiQm91bmRhcnkgbm90IGNoYW5nZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgaWYgY29udmVydGluZyBibG9ja3MgYXJlIGVyYXNlZCAqLworCW9sZCA9IHRoaXMtPmJvdW5kYXJ5W2RpZV0gKyAoZGllICogdGhpcy0+ZGVuc2l0eV9tYXNrKTsKKwluZXcgPSBib3VuZGFyeSArIChkaWUgKiB0aGlzLT5kZW5zaXR5X21hc2spOworCXJldCA9IGZsZXhvbmVuYW5kX2NoZWNrX2Jsb2Nrc19lcmFzZWQobXRkLCBtaW4ob2xkLCBuZXcpCisJCQkJCQkrIDEsIG1heChvbGQsIG5ldykpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmbGV4b25lbmFuZF9zZXRfYm91bmRhcnk6IFBsZWFzZSBlcmFzZSBibG9ja3MgYmVmb3JlIGJvdW5kYXJ5IGNoYW5nZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJdGhpcy0+Y29tbWFuZChtdGQsIEZMRVhPTkVOQU5EX0NNRF9QSV9BQ0NFU1MsIGRpZSwgMCk7CisJdGhpcy0+d2FpdChtdGQsIEZMX1NZTkNJTkcpOworCisJLyogQ2hlY2sgaXMgYm91bmRhcnkgaXMgbG9ja2VkICovCisJdGhpcy0+Y29tbWFuZChtdGQsIEZMRVhPTkVOQU5EX0NNRF9SRUFEX1BJLCBkaWUsIDApOworCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9SRUFESU5HKTsKKworCXRoaXNib3VuZGFyeSA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9EQVRBUkFNKTsKKwlpZiAoKHRoaXNib3VuZGFyeSA+PiBGTEVYT05FTkFORF9QSV9VTkxPQ0tfU0hJRlQpICE9IDMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmbGV4b25lbmFuZF9zZXRfYm91bmRhcnk6IGJvdW5kYXJ5IGxvY2tlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXByaW50ayhLRVJOX0lORk8gImZsZXhvbmVuYW5kX3NldF9ib3VuZGFyeTogQ2hhbmdpbmcgZGllICVkIGJvdW5kYXJ5OiAlZCVzXG4iLAorCQkJZGllLCBib3VuZGFyeSwgbG9jayA/ICIoTG9ja2VkKSIgOiAiKFVubG9ja2VkKSIpOworCisJYm91bmRhcnkgJj0gRkxFWE9ORU5BTkRfUElfTUFTSzsKKwlib3VuZGFyeSB8PSBsb2NrID8gMCA6ICgzIDw8IEZMRVhPTkVOQU5EX1BJX1VOTE9DS19TSElGVCk7CisKKwlhZGRyID0gZGllID8gdGhpcy0+ZGllc2l6ZVswXSA6IDA7CisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0VSQVNFLCBhZGRyLCAwKTsKKwlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfRVJBU0lORyk7CisJaWYgKHJldCkgeworCQlwcmludGsoImZsZXhvbmVuYW5kX3NldF9ib3VuZGFyeToiCisJCQkiRmFpbGVkIFBJIGVyYXNlIGZvciBEaWUgJWRcbiIsIGRpZSk7CisJCWdvdG8gb3V0OworCX0KKworCXRoaXMtPndyaXRlX3dvcmQoYm91bmRhcnksIHRoaXMtPmJhc2UgKyBPTkVOQU5EX0RBVEFSQU0pOworCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9QUk9HLCBhZGRyLCAwKTsKKwlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfV1JJVElORyk7CisJaWYgKHJldCkgeworCQlwcmludGsoImZsZXhvbmVuYW5kX3NldF9ib3VuZGFyeToiCisJCQkiRmFpbGVkIFBJIHdyaXRlIGZvciBEaWUgJWRcbiIsIGRpZSk7CisJCWdvdG8gb3V0OworCX0KKworCXRoaXMtPmNvbW1hbmQobXRkLCBGTEVYT05FTkFORF9DTURfUElfVVBEQVRFLCBkaWUsIDApOworCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9XUklUSU5HKTsKK291dDoKKwl0aGlzLT53cml0ZV93b3JkKE9ORU5BTkRfQ01EX1JFU0VULCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfQ09NTUFORCk7CisJdGhpcy0+d2FpdChtdGQsIEZMX1JFU0VUSU5HKTsKKwlpZiAoIXJldCkKKwkJLyogUmVjYWxjdWxhdGUgZGV2aWNlIHNpemUgb24gYm91bmRhcnkgY2hhbmdlKi8KKwkJZmxleG9uZW5hbmRfZ2V0X3NpemUobXRkKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgogICogb25lbmFuZF9wcm9iZSAtIFtPbmVOQU5EIEludGVyZmFjZV0gUHJvYmUgdGhlIE9uZU5BTkQgZGV2aWNlCiAgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQogICoKQEAgLTIwMTYsMTYgKzI1NDYsMTEgQEAKIAltYWZfaWQgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX01BTlVGQUNUVVJFUl9JRCk7CiAJZGV2X2lkID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19ERVZJQ0VfSUQpOwogCXZlcl9pZCA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfVkVSU0lPTl9JRCk7CisJdGhpcy0+dGVjaG5vbG9neSA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfVEVDSE5PTE9HWSk7CiAKIAkvKiBDaGVjayBPbmVOQU5EIGRldmljZSAqLwogCWlmIChtYWZfaWQgIT0gYnJhbV9tYWZfaWQgfHwgZGV2X2lkICE9IGJyYW1fZGV2X2lkKQogCQlyZXR1cm4gLUVOWElPOwotCi0JLyogRklYTUUgOiBDdXJyZW50IE9uZU5BTkQgTVREIGRvZXNuJ3Qgc3VwcG9ydCBGbGV4LU9uZU5BTkQgKi8KLQlpZiAoZGV2X2lkICYgKDEgPDwgOSkpIHsKLQkJcHJpbnRrKCJOb3QgeWV0IHN1cHBvcnQgRmxleC1PbmVOQU5EXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9CiAKIAkvKiBGbGFzaCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KIAltdGQtPm5hbWUgPSBvbmVuYW5kX3ByaW50X2RldmljZV9pbmZvKGRldl9pZCwgdmVyX2lkKTsKQEAgLTIwMzMsMzEgKzI1NTgsNTcgQEAKIAl0aGlzLT52ZXJzaW9uX2lkID0gdmVyX2lkOwogCiAJZGVuc2l0eSA9IG9uZW5hbmRfZ2V0X2RlbnNpdHkoZGV2X2lkKTsKKwlpZiAoRkxFWE9ORU5BTkQodGhpcykpIHsKKwkJdGhpcy0+ZGllcyA9IE9ORU5BTkRfSVNfRERQKHRoaXMpID8gMiA6IDE7CisJCS8qIE1heGltdW0gcG9zc2libGUgZXJhc2UgcmVnaW9ucyAqLworCQltdGQtPm51bWVyYXNlcmVnaW9ucyA9IHRoaXMtPmRpZXMgPDwgMTsKKwkJbXRkLT5lcmFzZXJlZ2lvbnMgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8pCisJCQkJCSogKHRoaXMtPmRpZXMgPDwgMSkpOworCQlpZiAoIW10ZC0+ZXJhc2VyZWdpb25zKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBGb3IgRmxleC1PbmVOQU5ELCBjaGlwc2l6ZSByZXByZXNlbnRzIG1heGltdW0gcG9zc2libGUgZGV2aWNlIHNpemUuCisJICogbXRkLT5zaXplIHJlcHJlc2VudHMgdGhlIGFjdHVhbCBkZXZpY2Ugc2l6ZS4KKwkgKi8KIAl0aGlzLT5jaGlwc2l6ZSA9ICgxNiA8PCBkZW5zaXR5KSA8PCAyMDsKLQkvKiBTZXQgZGVuc2l0eSBtYXNrLiBpdCBpcyB1c2VkIGZvciBERFAgKi8KLQlpZiAoT05FTkFORF9JU19ERFAodGhpcykpCi0JCXRoaXMtPmRlbnNpdHlfbWFzayA9ICgxIDw8IChkZW5zaXR5ICsgNikpOwotCWVsc2UKLQkJdGhpcy0+ZGVuc2l0eV9tYXNrID0gMDsKIAogCS8qIE9uZU5BTkQgcGFnZSBzaXplICYgYmxvY2sgc2l6ZSAqLwogCS8qIFRoZSBkYXRhIGJ1ZmZlciBzaXplIGlzIGVxdWFsIHRvIHBhZ2Ugc2l6ZSAqLwogCW10ZC0+d3JpdGVzaXplID0KIAkgICAgdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19EQVRBX0JVRkZFUl9TSVpFKTsKKwkvKiBXZSB1c2UgdGhlIGZ1bGwgQnVmZmVyUkFNICovCisJaWYgKE9ORU5BTkRfSVNfTUxDKHRoaXMpKQorCQltdGQtPndyaXRlc2l6ZSA8PD0gMTsKKwogCW10ZC0+b29ic2l6ZSA9IG10ZC0+d3JpdGVzaXplID4+IDU7CiAJLyogUGFnZXJzIHBlciBibG9jayBpcyBhbHdheXMgNjQgaW4gT25lTkFORCAqLwogCW10ZC0+ZXJhc2VzaXplID0gbXRkLT53cml0ZXNpemUgPDwgNjsKKwkvKgorCSAqIEZsZXgtT25lTkFORCBTTEMgYXJlYSBoYXMgNjQgcGFnZXMgcGVyIGJsb2NrLgorCSAqIEZsZXgtT25lTkFORCBNTEMgYXJlYSBoYXMgMTI4IHBhZ2VzIHBlciBibG9jay4KKwkgKiBFeHBvc2UgTUxDIGVyYXNlIHNpemUgdG8gZmluZCBlcmFzZV9zaGlmdCBhbmQgcGFnZV9tYXNrLgorCSAqLworCWlmIChGTEVYT05FTkFORCh0aGlzKSkKKwkJbXRkLT5lcmFzZXNpemUgPDw9IDE7CiAKIAl0aGlzLT5lcmFzZV9zaGlmdCA9IGZmcyhtdGQtPmVyYXNlc2l6ZSkgLSAxOwogCXRoaXMtPnBhZ2Vfc2hpZnQgPSBmZnMobXRkLT53cml0ZXNpemUpIC0gMTsKIAl0aGlzLT5wcGJfc2hpZnQgPSAodGhpcy0+ZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KTsKIAl0aGlzLT5wYWdlX21hc2sgPSAobXRkLT5lcmFzZXNpemUgLyBtdGQtPndyaXRlc2l6ZSkgLSAxOworCS8qIFNldCBkZW5zaXR5IG1hc2suIGl0IGlzIHVzZWQgZm9yIEREUCAqLworCWlmIChPTkVOQU5EX0lTX0REUCh0aGlzKSkKKwkJdGhpcy0+ZGVuc2l0eV9tYXNrID0gdGhpcy0+Y2hpcHNpemUgPj4gKHRoaXMtPmVyYXNlX3NoaWZ0ICsgMSk7CiAJLyogSXQncyByZWFsIHBhZ2Ugc2l6ZSAqLwogCXRoaXMtPndyaXRlc2l6ZSA9IG10ZC0+d3JpdGVzaXplOwogCiAJLyogUkVWSVNUOiBNdWx0aWNoaXAgaGFuZGxpbmcgKi8KIAotCW10ZC0+c2l6ZSA9IHRoaXMtPmNoaXBzaXplOworCWlmIChGTEVYT05FTkFORCh0aGlzKSkKKwkJZmxleG9uZW5hbmRfZ2V0X3NpemUobXRkKTsKKwllbHNlCisJCW10ZC0+c2l6ZSA9IHRoaXMtPmNoaXBzaXplOwogCiAJLyogQ2hlY2sgT25lTkFORCBmZWF0dXJlcyAqLwogCW9uZW5hbmRfY2hlY2tfZmVhdHVyZXMobXRkKTsKQEAgLTIxNDksNiArMjcwMCwxMSBAQAogCSAqIEFsbG93IHN1YnBhZ2Ugd3JpdGVzIHVwIHRvIG9vYnNpemUuCiAJICovCiAJc3dpdGNoIChtdGQtPm9vYnNpemUpIHsKKwljYXNlIDEyODoKKwkJdGhpcy0+ZWNjbGF5b3V0ID0gJm9uZW5hbmRfb29iXzEyODsKKwkJbXRkLT5zdWJwYWdlX3NmdCA9IDA7CisJCWJyZWFrOworCiAJY2FzZSA2NDoKIAkJdGhpcy0+ZWNjbGF5b3V0ID0gJm9uZW5hbmRfb29iXzY0OwogCQltdGQtPnN1YnBhZ2Vfc2Z0ID0gMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYwppbmRleCBkNTM4Zjk1Li4xMzU0ODc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2JidC5jCkBAIC02OSw2ICs2OSw3IEBACiAJbG9mZl90IGZyb207CiAJc2l6ZV90IHJlYWRsZW4sIG9vYmxlbjsKIAlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCByZ247CiAKIAlwcmludGsoS0VSTl9JTkZPICJTY2FubmluZyBkZXZpY2UgZm9yIGJhZCBibG9ja3NcbiIpOwogCkBAIC04Miw3ICs4Myw3IEBACiAJLyogTm90ZSB0aGF0IG51bWJsb2NrcyBpcyAyICogKHJlYWwgbnVtYmxvY2tzKSBoZXJlOwogCSAqIHNlZSBpICs9IDIgYmVsb3cgYXMgaXQgbWFrc2VzIHNoaWZ0aW5nIGFuZCBtYXNraW5nIGxlc3MgcGFpbmZ1bAogCSAqLwotCW51bWJsb2NrcyA9IG10ZC0+c2l6ZSA+PiAoYmJtLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKTsKKwludW1ibG9ja3MgPSB0aGlzLT5jaGlwc2l6ZSA+PiAoYmJtLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKTsKIAlzdGFydGJsb2NrID0gMDsKIAlmcm9tID0gMDsKIApAQCAtMTE1LDcgKzExNiwxMiBAQAogCQkJfQogCQl9CiAJCWkgKz0gMjsKLQkJZnJvbSArPSAoMSA8PCBiYm0tPmJidF9lcmFzZV9zaGlmdCk7CisKKwkJaWYgKEZMRVhPTkVOQU5EKHRoaXMpKSB7CisJCQlyZ24gPSBmbGV4b25lbmFuZF9yZWdpb24obXRkLCBmcm9tKTsKKwkJCWZyb20gKz0gbXRkLT5lcmFzZXJlZ2lvbnNbcmduXS5lcmFzZXNpemU7CisJCX0gZWxzZQorCQkJZnJvbSArPSAoMSA8PCBiYm0tPmJidF9lcmFzZV9zaGlmdCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNTIsNyArMTU4LDcgQEAKIAl1aW50OF90IHJlczsKIAogCS8qIEdldCBibG9jayBudW1iZXIgKiAyICovCi0JYmxvY2sgPSAoaW50KShvZmZzID4+IChiYm0tPmJidF9lcmFzZV9zaGlmdCAtIDEpKTsKKwlibG9jayA9IChpbnQpIChvbmVuYW5kX2Jsb2NrKHRoaXMsIG9mZnMpIDw8IDEpOwogCXJlcyA9IChiYm0tPmJidFtibG9jayA+PiAzXSA+PiAoYmxvY2sgJiAweDA2KSkgJiAweDAzOwogCiAJTVREREVCVUcgKE1URF9ERUJVR19MRVZFTDIsCkBAIC0xOTEsNyArMTk3LDcgQEAKIAlzdHJ1Y3QgYmJtX2luZm8gKmJibSA9IHRoaXMtPmJibTsKIAlpbnQgbGVuLCByZXQgPSAwOwogCi0JbGVuID0gbXRkLT5zaXplID4+ICh0aGlzLT5lcmFzZV9zaGlmdCArIDIpOworCWxlbiA9IHRoaXMtPmNoaXBzaXplID4+ICh0aGlzLT5lcmFzZV9zaGlmdCArIDIpOwogCS8qIEFsbG9jYXRlIG1lbW9yeSAoMmJpdCBwZXIgYmxvY2spICovCiAJYmJtLT5iYnQgPSBtYWxsb2MobGVuKTsKIAlpZiAoIWJibS0+YmJ0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfdWJvb3QuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF91Ym9vdC5jCmluZGV4IDk4MjNiNWIuLmM2NDIwMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF91Ym9vdC5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF91Ym9vdC5jCkBAIC00MCw4ICs0MCwxMCBAQAogCiAJb25lbmFuZF9zY2FuKCZvbmVuYW5kX210ZCwgMSk7CiAKKwlpZiAob25lbmFuZF9jaGlwLmRldmljZV9pZCAmIERFVklDRV9JU19GTEVYT05FTkFORCkKKwkJcHV0cygiRmxleC0iKTsKIAlwdXRzKCJPbmVOQU5EOiAiKTsKLQlwcmludF9zaXplKG9uZW5hbmRfbXRkLnNpemUsICJcbiIpOworCXByaW50X3NpemUob25lbmFuZF9jaGlwLmNoaXBzaXplLCAiXG4iKTsKIAogI2lmZGVmIENPTkZJR19NVERfREVWSUNFCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2Z0cnRjMDEwLmMgYi9kcml2ZXJzL3J0Yy9mdHJ0YzAxMC5jCmluZGV4IGMzYzBiYzIuLjc3MzhhN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2Z0cnRjMDEwLmMKKysrIGIvZHJpdmVycy9ydGMvZnRydGMwMTAuYwpAQCAtNDcsMTUgKzQ3LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZnRydGMwMTAgKnJ0YyA9IChzdHJ1Y3QgZnRydGMwMTAgKilDT05GSUdfRlRSVEMwMTBfQkFTRTsKIAotc3RhdGljIHZvaWQgZnRydGMwMTBfZW5hYmxlICh2b2lkKQorc3RhdGljIHZvaWQgZnRydGMwMTBfZW5hYmxlKHZvaWQpCiB7Ci0Jd3JpdGVsIChGVFJUQzAxMF9DUl9FTkFCTEUsICZydGMtPmNyKTsKKwl3cml0ZWwoRlRSVEMwMTBfQ1JfRU5BQkxFLCAmcnRjLT5jcik7CiB9CiAKIC8qCiAgKiByZXR1cm4gY3VycmVudCB0aW1lIGluIHNlY29uZHMKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZnRydGMwMTBfdGltZSAodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZ0cnRjMDEwX3RpbWUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGRheTsKIAl1bnNpZ25lZCBsb25nIGhvdXI7CkBAIC02NCwxMSArNjQsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHNlY29uZDI7CiAKIAlkbyB7Ci0JCXNlY29uZAk9IHJlYWRsICgmcnRjLT5zZWMpOwotCQlkYXkJPSByZWFkbCAoJnJ0Yy0+ZGF5KTsKLQkJaG91cgk9IHJlYWRsICgmcnRjLT5ob3VyKTsKLQkJbWludXRlCT0gcmVhZGwgKCZydGMtPm1pbik7Ci0JCXNlY29uZDIJPSByZWFkbCAoJnJ0Yy0+c2VjKTsKKwkJc2Vjb25kCT0gcmVhZGwoJnJ0Yy0+c2VjKTsKKwkJZGF5CT0gcmVhZGwoJnJ0Yy0+ZGF5KTsKKwkJaG91cgk9IHJlYWRsKCZydGMtPmhvdXIpOworCQltaW51dGUJPSByZWFkbCgmcnRjLT5taW4pOworCQlzZWNvbmQyCT0gcmVhZGwoJnJ0Yy0+c2VjKTsKIAl9IHdoaWxlIChzZWNvbmQgIT0gc2Vjb25kMik7CiAKIAlyZXR1cm4gZGF5ICogMjQgKiA2MCAqIDYwICsgaG91ciAqIDYwICogNjAgKyBtaW51dGUgKiA2MCArIHNlY29uZDsKQEAgLTc4LDE2ICs3OCwxNiBAQAogICogR2V0IHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUgUlRDCiAgKi8KIAotaW50IHJ0Y19nZXQgKHN0cnVjdCBydGNfdGltZSAqdG1wKQoraW50IHJ0Y19nZXQoc3RydWN0IHJ0Y190aW1lICp0bXApCiB7CiAJdW5zaWduZWQgbG9uZyBub3c7CiAKLQlkZWJ1ZyAoIiVzKCk6IHJlY29yZCByZWdpc3RlcjogJXhcbiIsCi0JICAgICAgIF9fZnVuY19fLCByZWFkbCAoJnJ0Yy0+cmVjb3JkKSk7CisJZGVidWcoIiVzKCk6IHJlY29yZCByZWdpc3RlcjogJXhcbiIsCisJICAgICAgX19mdW5jX18sIHJlYWRsKCZydGMtPnJlY29yZCkpOwogCi0Jbm93ID0gZnRydGMwMTBfdGltZSAoKSArIHJlYWRsICgmcnRjLT5yZWNvcmQpOworCW5vdyA9IGZ0cnRjMDEwX3RpbWUoKSArIHJlYWRsKCZydGMtPnJlY29yZCk7CiAKLQl0b190bSAobm93LCB0bXApOworCXRvX3RtKG5vdywgdG1wKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTUsMzAgKzk1LDMwIEBACiAvKgogICogU2V0IHRoZSBSVEMKICAqLwotaW50IHJ0Y19zZXQgKHN0cnVjdCBydGNfdGltZSAqdG1wKQoraW50IHJ0Y19zZXQoc3RydWN0IHJ0Y190aW1lICp0bXApCiB7CiAJdW5zaWduZWQgbG9uZyBuZXc7CiAJdW5zaWduZWQgbG9uZyBub3c7CiAKLQlkZWJ1ZyAoIiVzKCk6IERBVEU6ICU0ZC0lMDJkLSUwMmQgKHdkYXk9JWQpICBUSU1FOiAlMmQ6JTAyZDolMDJkXG4iLAotCSAgICAgICBfX2Z1bmNfXywKLQkgICAgICAgdG1wLT50bV95ZWFyLCB0bXAtPnRtX21vbiwgdG1wLT50bV9tZGF5LCB0bXAtPnRtX3dkYXksCi0JICAgICAgIHRtcC0+dG1faG91ciwgdG1wLT50bV9taW4sIHRtcC0+dG1fc2VjKTsKKwlkZWJ1ZygiJXMoKTogREFURTogJTRkLSUwMmQtJTAyZCAod2RheT0lZCkgIFRJTUU6ICUyZDolMDJkOiUwMmRcbiIsCisJICAgICAgX19mdW5jX18sCisJICAgICAgdG1wLT50bV95ZWFyLCB0bXAtPnRtX21vbiwgdG1wLT50bV9tZGF5LCB0bXAtPnRtX3dkYXksCisJICAgICAgdG1wLT50bV9ob3VyLCB0bXAtPnRtX21pbiwgdG1wLT50bV9zZWMpOwogCi0JbmV3ID0gbWt0aW1lICh0bXAtPnRtX3llYXIsIHRtcC0+dG1fbW9uLCB0bXAtPnRtX21kYXksIHRtcC0+dG1faG91ciwKLQkJICAgICAgdG1wLT50bV9taW4sIHRtcC0+dG1fc2VjKTsKKwluZXcgPSBta3RpbWUodG1wLT50bV95ZWFyLCB0bXAtPnRtX21vbiwgdG1wLT50bV9tZGF5LCB0bXAtPnRtX2hvdXIsCisJCSAgICAgdG1wLT50bV9taW4sIHRtcC0+dG1fc2VjKTsKIAotCW5vdyA9IGZ0cnRjMDEwX3RpbWUgKCk7CisJbm93ID0gZnRydGMwMTBfdGltZSgpOwogCi0JZGVidWcgKCIlcygpOiB3cml0ZSAlbHggdG8gcmVjb3JkIHJlZ2lzdGVyXG4iLCBfX2Z1bmNfXywgbmV3IC0gbm93KTsKKwlkZWJ1ZygiJXMoKTogd3JpdGUgJWx4IHRvIHJlY29yZCByZWdpc3RlclxuIiwgX19mdW5jX18sIG5ldyAtIG5vdyk7CiAKLQl3cml0ZWwgKG5ldyAtIG5vdywgJnJ0Yy0+cmVjb3JkKTsKKwl3cml0ZWwobmV3IC0gbm93LCAmcnRjLT5yZWNvcmQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcnRjX3Jlc2V0ICh2b2lkKQordm9pZCBydGNfcmVzZXQodm9pZCkKIHsKLQlkZWJ1ZyAoIiVzKClcbiIsIF9fZnVuY19fKTsKLQlmdHJ0YzAxMF9lbmFibGUgKCk7CisJZGVidWcoIiVzKClcbiIsIF9fZnVuY19fKTsKKwlmdHJ0YzAxMF9lbmFibGUoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL200MXQ5NC5jIGIvZHJpdmVycy9ydGMvbTQxdDk0LmMKaW5kZXggMDJiNDFkOS4uNWI2NjViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvbTQxdDk0LmMKKysrIGIvZHJpdmVycy9ydGMvbTQxdDk0LmMKQEAgLTEyMCw1ICsxMjAsNCBAQAogCSAqIENvdWxkIG5vdCBiZSB0ZXN0ZWQgYXMgdGhlIHJlc2V0IHBpbiBpcyBub3Qgd2lyZWQgb24KIAkgKiB0aGUgc2JjMzUtYWcyMCBib2FyZAogCSAqLwotCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvczNjMjR4MF9ydGMuYyBiL2RyaXZlcnMvcnRjL3MzYzI0eDBfcnRjLmMKaW5kZXggMWNlMzRlMy4uMDRkZTVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvczNjMjR4MF9ydGMuYworKysgYi9kcml2ZXJzL3J0Yy9zM2MyNHgwX3J0Yy5jCkBAIC0zMCwxMSArMzAsNyBAQAogCiAjaWYgKGRlZmluZWQoQ09ORklHX0NNRF9EQVRFKSkKIAotI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApCi0jaW5jbHVkZSA8czNjMjQwMC5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKLSNpbmNsdWRlIDxzM2MyNDEwLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vYXJjaC9zM2MyNHgwX2NwdS5oPgogCiAjaW5jbHVkZSA8cnRjLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2M2NHh4LmMgYi9kcml2ZXJzL3NlcmlhbC9zM2M2NHh4LmMKaW5kZXggMWI5NzRlMC4uNmQyMmRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjNjR4eC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzY0eHguYwpAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpbmNsdWRlIDxzM2M2NDAwLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvczNjNjQwMC5oPgogCiAjaWZkZWYgQ09ORklHX1NFUklBTDEKICNkZWZpbmUgVUFSVF9OUglTM0M2NFhYX1VBUlQwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfczNjMjR4MC5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3MzYzI0eDAuYwppbmRleCBjMmM3MmU0Li41ZGQ0ZGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfczNjMjR4MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9zM2MyNHgwLmMKQEAgLTE5LDExICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGNvbW1vbi5oPgotI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApIHx8IGRlZmluZWQoQ09ORklHX1RSQUIpCi0jaW5jbHVkZSA8czNjMjQwMC5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkKLSNpbmNsdWRlIDxzM2MyNDEwLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vYXJjaC9zM2MyNHgwX2NwdS5oPgogCiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3M1cGMxeHguYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9zNXBjMXh4LmMKaW5kZXggNjhjMDZhOS4uNzM2NjlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3M1cGMxeHguYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfczVwYzF4eC5jCkBAIC05OCwxNCArOTgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfZXJyX2NoZWNrKGNvbnN0IGludCBkZXZfaW5kZXgpCitzdGF0aWMgaW50IHNlcmlhbF9lcnJfY2hlY2soY29uc3QgaW50IGRldl9pbmRleCwgaW50IG9wKQogewogCXN0cnVjdCBzNXBjMXh4X3VhcnQgKmNvbnN0IHVhcnQgPSBzNXBjMXh4X2dldF9iYXNlX3VhcnQoZGV2X2luZGV4KTsKKwl1bnNpZ25lZCBpbnQgbWFzazsKIAotCWlmIChyZWFkbCgmdWFydC0+dWVyc3RhdCkgJiAweGYpCi0JCXJldHVybiAxOworCS8qCisJICogVUVSU1RBVAorCSAqIEJyZWFrIERldGVjdAlbM10KKwkgKiBGcmFtZSBFcnIJWzJdIDogcmVjZWl2ZSBvcGVyYXRpb24KKwkgKiBQYXJpdHkgRXJyCVsxXSA6IHJlY2VpdmUgb3BlcmF0aW9uCisJICogT3ZlcnJ1biBFcnIJWzBdIDogcmVjZWl2ZSBvcGVyYXRpb24KKwkgKi8KKwlpZiAob3ApCisJCW1hc2sgPSAweDg7CisJZWxzZQorCQltYXNrID0gMHhmOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlYWRsKCZ1YXJ0LT51ZXJzdGF0KSAmIG1hc2s7CiB9CiAKIC8qCkBAIC0xMTksNyArMTI5LDcgQEAKIAogCS8qIHdhaXQgZm9yIGNoYXJhY3RlciB0byBhcnJpdmUgKi8KIAl3aGlsZSAoIShyZWFkbCgmdWFydC0+dXRyc3RhdCkgJiAweDEpKSB7Ci0JCWlmIChzZXJpYWxfZXJyX2NoZWNrKGRldl9pbmRleCkpCisJCWlmIChzZXJpYWxfZXJyX2NoZWNrKGRldl9pbmRleCwgMCkpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEzNSw3ICsxNDUsNyBAQAogCiAJLyogd2FpdCBmb3Igcm9vbSBpbiB0aGUgdHggRklGTyAqLwogCXdoaWxlICghKHJlYWRsKCZ1YXJ0LT51dHJzdGF0KSAmIDB4MikpIHsKLQkJaWYgKHNlcmlhbF9lcnJfY2hlY2soZGV2X2luZGV4KSkKKwkJaWYgKHNlcmlhbF9lcnJfY2hlY2soZGV2X2luZGV4LCAxKSkKIAkJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCA2N2Q0NzhmLi5iMDNhNjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC02NSw4ICs2NSw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSTTkyMFQpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19TM0MyNDAwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX1MzQzI0WDApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TM0M2NDAwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19QQ0lfT0hDSSkgfHwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zM2M2NHh4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zM2M2NHh4LWhjZC5jCmluZGV4IDI3NGE0ZWQuLmNkMjk1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvczNjNjR4eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3MzYzY0eHgtaGNkLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8czNjNjQwMC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzY0MDAuaD4KIAogaW50IHVzYl9jcHVfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jZmJfY29uc29sZS5jIGIvZHJpdmVycy92aWRlby9jZmJfY29uc29sZS5jCmluZGV4IGZiYzRkZjkuLjE2ZDY2ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY2ZiX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NmYl9jb25zb2xlLmMKQEAgLTE0Niw5ICsxNDYsMTEgQEAKICNpZmRlZiBDT05GSUdfVklERU9fQ09SQUxQCiAjZGVmaW5lIFZJREVPX0ZCX0xJVFRMRV9FTkRJQU4KICNlbmRpZgorI2lmZGVmIENPTkZJR19WSURFT19NQjg2Mnh4X0FDQ0VMCiAjZGVmaW5lIFZJREVPX0hXX1JFQ1RGSUxMCiAjZGVmaW5lIFZJREVPX0hXX0JJVEJMVAogI2VuZGlmCisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogSW5jbHVkZSB2aWRlb19mYi5oIGFmdGVyIGRlZmluaXRpb25zIG9mIFZJREVPX0hXX1JFQ1RGSUxMIGV0YwkgICAgICovCkBAIC0zMTksNyArMzIxLDcgQEAKICNlbHNlCiAjZGVmaW5lIFNXQVAxNih4KQkgKHgpCiAjZGVmaW5lIFNXQVAzMih4KQkgKHgpCi0jaWYgZGVmaW5lZChWSURFT19GQl8xNkJQUF9QSVhFTF9TV0FQKQorI2lmIGRlZmluZWQoVklERU9fRkJfMTZCUFBfV09SRF9TV0FQKQogI2RlZmluZSBTSE9SVFNXQVAzMih4KQkgKCAoKHgpID4+IDE2KSB8ICgoeCkgPDwgMTYpICkKICNlbHNlCiAjZGVmaW5lIFNIT1JUU1dBUDMyKHgpCSAoeCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWI4NjJ4eC5jIGIvZHJpdmVycy92aWRlby9tYjg2Mnh4LmMKaW5kZXggYTg2NzZjYy4uZWRmMzRhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYjg2Mnh4LmMKKysrIGIvZHJpdmVycy92aWRlby9tYjg2Mnh4LmMKQEAgLTg5LDYgKzg5LDcgQEAKIAkJCQkgICAgICAgKEdDX0RJU1BfQkFTRSB8IEdDX0wwUEFMMCkgKyBcCiAJCQkJICAgICAgICgoaWR4KSA8PCAyKSksICh2YWwpKQogCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fTUI4NjJ4eF9BQ0NFTCkKIHN0YXRpYyB2b2lkIGdkY19zd19yZXNldCAodm9pZCkKIHsKIAlHcmFwaGljRGV2aWNlICpkZXYgPSAmbWI4NjJ4eDsKQEAgLTEyOSw2ICsxMzAsNyBAQAogCQkJYnJlYWs7CiAJCX0KIH0KKyNlbmRpZgogCiAjaWYgIWRlZmluZWQoQ09ORklHX1ZJREVPX0NPUkFMUCkKIHN0YXRpYyB2b2lkIGJvYXJkX2Rpc3BfaW5pdCAodm9pZCkKQEAgLTE0NCwxMSArMTQ2LDEzIEBACiAjZW5kaWYKIAogLyoKLSAqIEluaXQgZHJhd2luZyBlbmdpbmUKKyAqIEluaXQgZHJhd2luZyBlbmdpbmUgaWYgYWNjZWwgZW5hYmxlZC4KKyAqIEFsc28gY2xlYXJzIHZpc2libGUgZnJhbWVidWZmZXIuCiAgKi8KIHN0YXRpYyB2b2lkIGRlX2luaXQgKHZvaWQpCiB7CiAJR3JhcGhpY0RldmljZSAqZGV2ID0gJm1iODYyeHg7CisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fTUI4NjJ4eF9BQ0NFTCkKIAlpbnQgY2YgPSAoZGV2LT5nZGZCeXRlc1BQID09IDEpID8gMHgwMDAwIDogMHg4MDAwOwogCiAJZGV2LT5kcHJCYXNlID0gZGV2LT5mcmFtZUFkcnMgKyBHQ19EUkFXX0JBU0U7CkBAIC0xNzQsNiArMTc4LDE0IEBACiAJREVfV1JfRklGTyAoZGV2LT53aW5TaXplWSA8PCAxNiB8IGRldi0+d2luU2l6ZVgpOwogCS8qIHN5bmMgd2l0aCBTVyBhY2Nlc3MgdG8gZnJhbWVidWZmZXIgKi8KIAlkZV93YWl0ICgpOworI2Vsc2UKKwl1bnNpZ25lZCBpbnQgaSwgKnA7CisKKwlpID0gZGV2LT53aW5TaXplWCAqIGRldi0+d2luU2l6ZVk7CisJcCA9ICh1bnNpZ25lZCBpbnQgKilkZXYtPmZyYW1lQWRyczsKKwl3aGlsZSAoaS0tKQorCQkqcCsrID0gMDsKKyNlbmRpZgogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfVklERU9fQ09SQUxQKQpAQCAtMzQwLDYgKzM1MiwzMCBAQAogfQogI2VuZGlmCiAKKworI2lmICFkZWZpbmVkKENPTkZJR19WSURFT19DT1JBTFApCitpbnQgbWI4NjJ4eF9wcm9iZSh1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwlHcmFwaGljRGV2aWNlICpkZXYgPSAmbWI4NjJ4eDsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJZGV2LT5mcmFtZUFkcnMgPSBhZGRyOworCWRldi0+ZHByQmFzZSA9IGRldi0+ZnJhbWVBZHJzICsgR0NfRFJBV19CQVNFOworCisJLyogVHJ5IHRvIGFjY2VzcyBHREMgSUQvUmV2aXNpb24gcmVnaXN0ZXJzICovCisJcmVnID0gSE9TVF9SRF9SRUcgKEdDX0NJRCk7CisJcmVnID0gSE9TVF9SRF9SRUcgKEdDX0NJRCk7CisJaWYgKHJlZyA9PSAweDMwMykgeworCQlyZWcgPSBERV9SRF9SRUcoR0NfUkVWKTsKKwkJcmVnID0gREVfUkRfUkVHKEdDX1JFVik7CisJCWlmICgocmVnICYgfjB4ZmYpID09IDB4MjAwNTAxMDApCisJCQlyZXR1cm4gTUI4NjJYWF9UWVBFX0xJTUU7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogdm9pZCAqdmlkZW9faHdfaW5pdCAodm9pZCkKIHsKIAlHcmFwaGljRGV2aWNlICpkZXYgPSAmbWI4NjJ4eDsKQEAgLTM1OSw4ICszOTUsMTYgQEAKIAlpZiAoKGRldi0+ZnJhbWVBZHJzID0gYm9hcmRfdmlkZW9faW5pdCAoKSkgPT0gMCkgewogCQlwdXRzICgiQ29udHJvbGxlciBub3QgZm91bmQhXG4iKTsKIAkJcmV0dXJuIE5VTEw7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJcHV0cyAoIkxpbWVcbiIpOworCisJCS8qIFNldCBDaGFuZ2Ugb2YgQ2xvY2sgRnJlcXVlbmN5IFJlZ2lzdGVyICovCisJCUhPU1RfV1JfUkVHIChHQ19DQ0YsIENPTkZJR19TWVNfTUI4NjJ4eF9DQ0YpOworCQkvKiBEZWxheSByZXF1aXJlZCAqLworCQl1ZGVsYXkoMzAwKTsKKwkJLyogU2V0IE1lbW9yeSBJL0YgTW9kZSBSZWdpc3RlcikgKi8KKwkJSE9TVF9XUl9SRUcgKEdDX01NUiwgQ09ORklHX1NZU19NQjg2Mnh4X01NUik7CisJfQogI2VuZGlmCiAKIAlkZV9pbml0ICgpOwpAQCAtMzg5LDYgKzQzMyw3IEBACiAJTDBQQUxfV1JfUkVHIChpbmRleCwgKHIgPDwgMTYpIHwgKGcgPDwgOCkgfCAoYikpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fTUI4NjJ4eF9BQ0NFTCkKIC8qCiAgKiBEcmF3aW5nIGVuZ2luZSBGaWxsIGFuZCBCaXRCbHQgc2NyZWVuIHJlZ2lvbgogICovCkBAIC00MzAsMyArNDc1LDQgQEAKIAlERV9XUl9GSUZPICgoaGVpZ2h0IDw8IDE2KSB8IHdpZHRoKTsKIAlkZV93YWl0ICgpOyAvKiBzeW5jICovCiB9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwaS9NYWtlZmlsZSBiL2V4YW1wbGVzL2FwaS9NYWtlZmlsZQppbmRleCAwNGEyNzBiLi5kNGM1Y2EyIDEwMDY0NAotLS0gYS9leGFtcGxlcy9hcGkvTWFrZWZpbGUKKysrIGIvZXhhbXBsZXMvYXBpL01ha2VmaWxlCkBAIC00NCw2ICs0NCw3IEBACiBFWFRfQ09CSl9GSUxFUy0kKENPTkZJR19BUEkpICs9IGxpYl9nZW5lcmljL2N0eXBlLm8KIEVYVF9DT0JKX0ZJTEVTLSQoQ09ORklHX0FQSSkgKz0gbGliX2dlbmVyaWMvZGl2NjQubwogRVhUX0NPQkpfRklMRVMtJChDT05GSUdfQVBJKSArPSBsaWJfZ2VuZXJpYy9zdHJpbmcubworRVhUX0NPQkpfRklMRVMtJChDT05GSUdfQVBJKSArPSBsaWJfZ2VuZXJpYy90aW1lLm8KIEVYVF9DT0JKX0ZJTEVTLSQoQ09ORklHX0FQSSkgKz0gbGliX2dlbmVyaWMvdnNwcmludGYubwogaWZlcSAoJChBUkNIKSxwcGMpCiBFWFRfU09CSl9GSUxFUy0kKENPTkZJR19BUEkpICs9IGxpYl9wcGMvcHBjc3RyaW5nLm8KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2FwaS9saWJnZW53cmFwLmMgYi9leGFtcGxlcy9hcGkvbGliZ2Vud3JhcC5jCmluZGV4IDJiNjJiYWQuLjJiMTA3ZDkgMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzL2FwaS9saWJnZW53cmFwLmMKKysrIGIvZXhhbXBsZXMvYXBpL2xpYmdlbndyYXAuYwpAQCAtNzQsNyArNzQsNyBAQAogCXViX3B1dGMoYyk7CiB9CiAKLXZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXViX3VkZWxheSh1c2VjKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvNHh4X2kyYy5oIGIvaW5jbHVkZS80eHhfaTJjLmgKaW5kZXggMDcwNjU3Zi4uMGM2YzkyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS80eHhfaTJjLmgKKysrIGIvaW5jbHVkZS80eHhfaTJjLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogKEMpIENvcHlyaWdodCAyMDA3CisgKiAoQykgQ29weXJpZ2h0IDIwMDctMjAwOQogICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgogICoKICAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCkBAIC01MiwyMiArNTIsMjYgQEAKICNkZWZpbmUgSTJDX0JBU0VfQUREUgkoMHhFRjYwMDUwMCArIEkyQ19CVVNfT0ZGUykKICNlbmRpZgogCi0jZGVmaW5lIEkyQ19SRUdJU1RFUlNfQkFTRV9BRERSRVNTIEkyQ19CQVNFX0FERFIKLSNkZWZpbmUgSUlDX01EQlVGCShJMkNfUkVHSVNURVJTX0JBU0VfQUREUkVTUytJSUNNREJVRikKLSNkZWZpbmUgSUlDX1NEQlVGCShJMkNfUkVHSVNURVJTX0JBU0VfQUREUkVTUytJSUNTREJVRikKLSNkZWZpbmUgSUlDX0xNQURSCShJMkNfUkVHSVNURVJTX0JBU0VfQUREUkVTUytJSUNMTUFEUikKLSNkZWZpbmUgSUlDX0hNQURSCShJMkNfUkVHSVNURVJTX0JBU0VfQUREUkVTUytJSUNITUFEUikKLSNkZWZpbmUgSUlDX0NOVEwJKEkyQ19SRUdJU1RFUlNfQkFTRV9BRERSRVNTK0lJQ0NOVEwpCi0jZGVmaW5lIElJQ19NRENOVEwJKEkyQ19SRUdJU1RFUlNfQkFTRV9BRERSRVNTK0lJQ01EQ05UTCkKLSNkZWZpbmUgSUlDX1NUUwkJKEkyQ19SRUdJU1RFUlNfQkFTRV9BRERSRVNTK0lJQ1NUUykKLSNkZWZpbmUgSUlDX0VYVFNUUwkoSTJDX1JFR0lTVEVSU19CQVNFX0FERFJFU1MrSUlDRVhUU1RTKQotI2RlZmluZSBJSUNfTFNBRFIJKEkyQ19SRUdJU1RFUlNfQkFTRV9BRERSRVNTK0lJQ0xTQURSKQotI2RlZmluZSBJSUNfSFNBRFIJKEkyQ19SRUdJU1RFUlNfQkFTRV9BRERSRVNTK0lJQ0hTQURSKQotI2RlZmluZSBJSUNfQ0xLRElWCShJMkNfUkVHSVNURVJTX0JBU0VfQUREUkVTUytJSUMwX0NMS0RJVikKLSNkZWZpbmUgSUlDX0lOVFJNU0sJKEkyQ19SRUdJU1RFUlNfQkFTRV9BRERSRVNTK0lJQ0lOVFJNU0spCi0jZGVmaW5lIElJQ19YRlJDTlQJKEkyQ19SRUdJU1RFUlNfQkFTRV9BRERSRVNTK0lJQ1hGUkNOVCkKLSNkZWZpbmUgSUlDX1hUQ05UTFNTCShJMkNfUkVHSVNURVJTX0JBU0VfQUREUkVTUytJSUNYVENOVExTUykKLSNkZWZpbmUgSUlDX0RJUkVDVENOVEwJKEkyQ19SRUdJU1RFUlNfQkFTRV9BRERSRVNTK0lJQ0RJUkVDVENOVEwpCitzdHJ1Y3QgcHBjNHh4X2kyYyB7CisJdTggbWRidWY7CisJdTggcmVzMTsKKwl1OCBzZGJ1ZjsKKwl1OCByZXMyOworCXU4IGxtYWRyOworCXU4IGhtYWRyOworCXU4IGNudGw7CisJdTggbWRjbnRsOworCXU4IHN0czsKKwl1OCBleHRzdHM7CisJdTggbHNhZHI7CisJdTggaHNhZHI7CisJdTggY2xrZGl2OworCXU4IGludHJtc2s7CisJdTggeGZyY250OworCXU4IHh0Y250bHNzOworCXU4IGRpcmVjdGNudGw7CisJdTggaW50cjsKK307CiAKIC8qIE1EQ05UTCBSZWdpc3RlciBCaXQgZGVmaW5pdGlvbiAqLwogI2RlZmluZSBJSUNfTURDTlRMX0hTQ0wJCTB4MDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWEzMjAvYTMyMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYTMyMC9hMzIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMwYTA5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWEzMjAvYTMyMC5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgRmFyYWRheSBUZWNobm9sb2d5CisgKiBQby1ZdSBDaHVhbmcgPHJhdGJlcnRAZmFyYWRheS10ZWNoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQTMyMF9ICisjZGVmaW5lIF9fQTMyMF9ICisKKy8qCisgKiBIYXJkd2FyZSByZWdpc3RlciBiYXNlcworICovCisjZGVmaW5lIENPTkZJR19GVFNNQzAyMF9CQVNFCTB4OTAyMDAwMDAJLyogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyICovCisjZGVmaW5lIENPTkZJR19ERUJVR19MRUQJMHg5MDJmZmZmYwkvKiBEZWJ1ZyBMRUQgKi8KKyNkZWZpbmUgQ09ORklHX0ZUU0RNQzAyMF9CQVNFCTB4OTAzMDAwMDAJLyogU0RSQU0gQ29udHJvbGxlciAqLworI2RlZmluZSBDT05GSUdfRlRNQUMxMDBfQkFTRQkweDkwOTAwMDAwCS8qIEV0aGVybmV0ICovCisjZGVmaW5lIENPTkZJR19GVFBNVTAxMF9CQVNFCTB4OTgxMDAwMDAJLyogUG93ZXIgTWFuYWdlbWVudCBVbml0ICovCisjZGVmaW5lIENPTkZJR19GVFRNUjAxMF9CQVNFCTB4OTg0MDAwMDAJLyogVGltZXIgKi8KKyNkZWZpbmUgQ09ORklHX0ZUUlRDMDEwX0JBU0UJMHg5ODYwMDAwMAkvKiBSZWFsIFRpbWUgQ2xvY2sqLworCisjZW5kaWYJLyogX19BMzIwX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYTMyMC9mdHBtdTAxMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYTMyMC9mdHBtdTAxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZjdhMzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hMzIwL2Z0cG11MDEwLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgRmFyYWRheSBUZWNobm9sb2d5CisgKiBQby1ZdSBDaHVhbmcgPHJhdGJlcnRAZmFyYWRheS10ZWNoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKgorICogUG93ZXIgTWFuYWdlbWVudCBVbml0CisgKi8KKyNpZm5kZWYgX19GVFBNVTAxMF9ICisjZGVmaW5lIF9fRlRQTVUwMTBfSAorCitzdHJ1Y3QgZnRwbXUwMTAgeworCXVuc2lnbmVkIGludAlJRE5NQlIwOwkvKiAweDAwICovCisJdW5zaWduZWQgaW50CXJlc2VydmVkMDsJLyogMHgwNCAqLworCXVuc2lnbmVkIGludAlPU0NDOwkJLyogMHgwOCAqLworCXVuc2lnbmVkIGludAlQTU9ERTsJCS8qIDB4MEMgKi8KKwl1bnNpZ25lZCBpbnQJUE1DUjsJCS8qIDB4MTAgKi8KKwl1bnNpZ25lZCBpbnQJUEVEOwkJLyogMHgxNCAqLworCXVuc2lnbmVkIGludAlQRURTUjsJCS8qIDB4MTggKi8KKwl1bnNpZ25lZCBpbnQJcmVzZXJ2ZWQxOwkvKiAweDFDICovCisJdW5zaWduZWQgaW50CVBNU1I7CQkvKiAweDIwICovCisJdW5zaWduZWQgaW50CVBHU1I7CQkvKiAweDI0ICovCisJdW5zaWduZWQgaW50CU1GUFNSOwkJLyogMHgyOCAqLworCXVuc2lnbmVkIGludAlNSVNDOwkJLyogMHgyQyAqLworCXVuc2lnbmVkIGludAlQRExMQ1IwOwkvKiAweDMwICovCisJdW5zaWduZWQgaW50CVBETExDUjE7CS8qIDB4MzQgKi8KKwl1bnNpZ25lZCBpbnQJQUhCTUNMS09GRjsJLyogMHgzOCAqLworCXVuc2lnbmVkIGludAlBUEJNQ0xLT0ZGOwkvKiAweDNDICovCisJdW5zaWduZWQgaW50CURDU1JDUjA7CS8qIDB4NDAgKi8KKwl1bnNpZ25lZCBpbnQJRENTUkNSMTsJLyogMHg0NCAqLworCXVuc2lnbmVkIGludAlEQ1NSQ1IyOwkvKiAweDQ4ICovCisJdW5zaWduZWQgaW50CVNEUkFNSFRDOwkvKiAweDRDICovCisJdW5zaWduZWQgaW50CVBTUFIwOwkJLyogMHg1MCAqLworCXVuc2lnbmVkIGludAlQU1BSMTsJCS8qIDB4NTQgKi8KKwl1bnNpZ25lZCBpbnQJUFNQUjI7CQkvKiAweDU4ICovCisJdW5zaWduZWQgaW50CVBTUFIzOwkJLyogMHg1QyAqLworCXVuc2lnbmVkIGludAlQU1BSNDsJCS8qIDB4NjAgKi8KKwl1bnNpZ25lZCBpbnQJUFNQUjU7CQkvKiAweDY0ICovCisJdW5zaWduZWQgaW50CVBTUFI2OwkJLyogMHg2OCAqLworCXVuc2lnbmVkIGludAlQU1BSNzsJCS8qIDB4NkMgKi8KKwl1bnNpZ25lZCBpbnQJUFNQUjg7CQkvKiAweDcwICovCisJdW5zaWduZWQgaW50CVBTUFI5OwkJLyogMHg3NCAqLworCXVuc2lnbmVkIGludAlQU1BSMTA7CQkvKiAweDc4ICovCisJdW5zaWduZWQgaW50CVBTUFIxMTsJCS8qIDB4N0MgKi8KKwl1bnNpZ25lZCBpbnQJUFNQUjEyOwkJLyogMHg4MCAqLworCXVuc2lnbmVkIGludAlQU1BSMTM7CQkvKiAweDg0ICovCisJdW5zaWduZWQgaW50CVBTUFIxNDsJCS8qIDB4ODggKi8KKwl1bnNpZ25lZCBpbnQJUFNQUjE1OwkJLyogMHg4QyAqLworCXVuc2lnbmVkIGludAlBSEJETUFfUkFDQ1M7CS8qIDB4OTAgKi8KKwl1bnNpZ25lZCBpbnQJcmVzZXJ2ZWQyOwkvKiAweDk0ICovCisJdW5zaWduZWQgaW50CXJlc2VydmVkMzsJLyogMHg5OCAqLworCXVuc2lnbmVkIGludAlKU1M7CQkvKiAweDlDICovCisJdW5zaWduZWQgaW50CUNGQ19SQUNDOwkvKiAweEEwICovCisJdW5zaWduZWQgaW50CVNTUDFfUkFDQzsJLyogMHhBNCAqLworCXVuc2lnbmVkIGludAlVQVJUMVRYX1JBQ0M7CS8qIDB4QTggKi8KKwl1bnNpZ25lZCBpbnQJVUFSVDFSWF9SQUNDOwkvKiAweEFDICovCisJdW5zaWduZWQgaW50CVVBUlQyVFhfUkFDQzsJLyogMHhCMCAqLworCXVuc2lnbmVkIGludAlVQVJUMlJYX1JBQ0M7CS8qIDB4QjQgKi8KKwl1bnNpZ25lZCBpbnQJU0RDX1JBQ0M7CS8qIDB4QjggKi8KKwl1bnNpZ25lZCBpbnQJSTJTQUM5N19SQUNDOwkvKiAweEJDICovCisJdW5zaWduZWQgaW50CUlSREFUWF9SQUNDOwkvKiAweEMwICovCisJdW5zaWduZWQgaW50CXJlc2VydmVkNDsJLyogMHhDNCAqLworCXVuc2lnbmVkIGludAlVU0JEX1JBQ0M7CS8qIDB4QzggKi8KKwl1bnNpZ25lZCBpbnQJSVJEQVJYX1JBQ0M7CS8qIDB4Q0MgKi8KKwl1bnNpZ25lZCBpbnQJSVJEQV9SQUNDOwkvKiAweEQwICovCisJdW5zaWduZWQgaW50CUVEMF9SQUNDOwkvKiAweEQ0ICovCisJdW5zaWduZWQgaW50CUVEMV9SQUNDOwkvKiAweEQ4ICovCit9OworCisvKgorICogSUQgTnVtYmVyIDAgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGVFBNVTAxMF9JRF9BMzIwQQkweDAzMjAwMDAwCisjZGVmaW5lIEZUUE1VMDEwX0lEX0EzMjBDCTB4MDMyMDAwMTAKKyNkZWZpbmUgRlRQTVUwMTBfSURfQTMyMEQJMHgwMzIwMDAzMAorCisvKgorICogT1NDIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGVFBNVTAxMF9PU0NDX09TQ0hfVFJJCQkoMSA8PCAxMSkKKyNkZWZpbmUgRlRQTVUwMTBfT1NDQ19PU0NIX1NUQUJMRQkoMSA8PCA5KQorI2RlZmluZSBGVFBNVTAxMF9PU0NDX09TQ0hfT0ZGCQkoMSA8PCA4KQorCisjZGVmaW5lIEZUUE1VMDEwX09TQ0NfT1NDTF9UUkkJCSgxIDw8IDMpCisjZGVmaW5lIEZUUE1VMDEwX09TQ0NfT1NDTF9SVENMU0VMCSgxIDw8IDIpCisjZGVmaW5lIEZUUE1VMDEwX09TQ0NfT1NDTF9TVEFCTEUJKDEgPDwgMSkKKyNkZWZpbmUgRlRQTVUwMTBfT1NDQ19PU0NMX09GRgkJKDEgPDwgMCkKKworLyoKKyAqIFBvd2VyIE1vZGUgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGVFBNVTAxMF9QTU9ERV9ESVZBSEJDTEtfTUFTSwkoMHg3IDw8IDQpCisjZGVmaW5lIEZUUE1VMDEwX1BNT0RFX0RJVkFIQkNMS18yCSgweDAgPDwgNCkKKyNkZWZpbmUgRlRQTVUwMTBfUE1PREVfRElWQUhCQ0xLXzMJKDB4MSA8PCA0KQorI2RlZmluZSBGVFBNVTAxMF9QTU9ERV9ESVZBSEJDTEtfNAkoMHgyIDw8IDQpCisjZGVmaW5lIEZUUE1VMDEwX1BNT0RFX0RJVkFIQkNMS182CSgweDMgPDwgNCkKKyNkZWZpbmUgRlRQTVUwMTBfUE1PREVfRElWQUhCQ0xLXzgJKDB4NCA8PCA0KQorI2RlZmluZSBGVFBNVTAxMF9QTU9ERV9ESVZBSEJDTEsocG1vZGUpCSgoKHBtb2RlKSA+PiA0KSAmIDB4NykKKyNkZWZpbmUgRlRQTVUwMTBfUE1PREVfRkNTCQkoMSA8PCAyKQorI2RlZmluZSBGVFBNVTAxMF9QTU9ERV9UVVJCTwkJKDEgPDwgMSkKKyNkZWZpbmUgRlRQTVUwMTBfUE1PREVfU0xFRVAJCSgxIDw8IDApCisKKy8qCisgKiBQb3dlciBNYW5hZ2VyIFN0YXR1cyBSZWdpc3RlcgorICovCisjZGVmaW5lIEZUUE1VMDEwX1BNU1JfU01SCSgxIDw8IDEwKQorCisjZGVmaW5lIEZUUE1VMDEwX1BNU1JfUkRICSgxIDw8IDIpCisjZGVmaW5lIEZUUE1VMDEwX1BNU1JfUEgJKDEgPDwgMSkKKyNkZWZpbmUgRlRQTVUwMTBfUE1TUl9DS0VITE9XCSgxIDw8IDApCisKKy8qCisgKiBNdWx0aS1GdW5jdGlvbiBQb3J0IFNldHRpbmcgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGVFBNVTAxMF9NRlBTUl9NT0RFTVBJTlNFTAkoMSA8PCAxNCkKKyNkZWZpbmUgRlRQTVUwMTBfTUZQU1JfQUM5N0NMS09VVFNFTAkoMSA8PCAxMykKKyNkZWZpbmUgRlRQTVUwMTBfTUZQU1JfQUM5N1BJTlNFTAkoMSA8PCAzKQorCisvKgorICogUExML0RMTCBDb250cm9sIFJlZ2lzdGVyIDAKKyAqLworI2RlZmluZSBGVFBNVTAxMF9QRExMQ1IwX0hDTEtPVVRESVMoY3IwKQkoKChjcjApID4+IDIwKSAmIDB4ZikKKyNkZWZpbmUgRlRQTVUwMTBfUERMTENSMF9ETExGUkFHCQkoMSA8PCAxOSkKKyNkZWZpbmUgRlRQTVUwMTBfUERMTENSMF9ETExTVFNFTAkJKDEgPDwgMTgpCisjZGVmaW5lIEZUUE1VMDEwX1BETExDUjBfRExMU1RBQkxFCQkoMSA8PCAxNykKKyNkZWZpbmUgRlRQTVUwMTBfUERMTENSMF9ETExESVMJCQkoMSA8PCAxNikKKyNkZWZpbmUgRlRQTVUwMTBfUERMTENSMF9QTEwxTlMoY3IwKQkJKCgoY3IwKSA+PiAzKSAmIDB4MWZmKQorI2RlZmluZSBGVFBNVTAxMF9QRExMQ1IwX1BMTDFTVFNFTAkJKDEgPDwgMikKKyNkZWZpbmUgRlRQTVUwMTBfUERMTENSMF9QTEwxU1RBQkxFCQkoMSA8PCAxKQorI2RlZmluZSBGVFBNVTAxMF9QRExMQ1IwX1BMTDFESVMJCSgxIDw8IDApCisKKyNlbmRpZgkvKiBfX0ZUUE1VMDEwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWEzMjAvZnRzZG1jMDIwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hMzIwL2Z0c2RtYzAyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2OTk3NzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hMzIwL2Z0c2RtYzAyMC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5IEZhcmFkYXkgVGVjaG5vbG9neQorICogUG8tWXUgQ2h1YW5nIDxyYXRiZXJ0QGZhcmFkYXktdGVjaC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIFNEUkFNIENvbnRyb2xsZXIKKyAqLworI2lmbmRlZiBfX0ZUU0RNQzAyMF9ICisjZGVmaW5lIF9fRlRTRE1DMDIwX0gKKworI2RlZmluZSBGVFNETUMwMjBfT0ZGU0VUX1RQMAkJMHgwMAorI2RlZmluZSBGVFNETUMwMjBfT0ZGU0VUX1RQMQkJMHgwNAorI2RlZmluZSBGVFNETUMwMjBfT0ZGU0VUX0NSCQkweDA4CisjZGVmaW5lIEZUU0RNQzAyMF9PRkZTRVRfQkFOSzBfQlNSCTB4MEMKKyNkZWZpbmUgRlRTRE1DMDIwX09GRlNFVF9CQU5LMV9CU1IJMHgxMAorI2RlZmluZSBGVFNETUMwMjBfT0ZGU0VUX0JBTksyX0JTUgkweDE0CisjZGVmaW5lIEZUU0RNQzAyMF9PRkZTRVRfQkFOSzNfQlNSCTB4MTgKKyNkZWZpbmUgRlRTRE1DMDIwX09GRlNFVF9CQU5LNF9CU1IJMHgxQworI2RlZmluZSBGVFNETUMwMjBfT0ZGU0VUX0JBTks1X0JTUgkweDIwCisjZGVmaW5lIEZUU0RNQzAyMF9PRkZTRVRfQkFOSzZfQlNSCTB4MjQKKyNkZWZpbmUgRlRTRE1DMDIwX09GRlNFVF9CQU5LN19CU1IJMHgyOAorI2RlZmluZSBGVFNETUMwMjBfT0ZGU0VUX0FDUgkJMHgzNAorCisvKgorICogVGltaW5nIFBhcmFtZXRldCAwIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRlRTRE1DMDIwX1RQMF9UQ0woeCkJKCh4KSAmIDB4MykKKyNkZWZpbmUgRlRTRE1DMDIwX1RQMF9UV1IoeCkJKCgoeCkgJiAweDMpIDw8IDQpCisjZGVmaW5lIEZUU0RNQzAyMF9UUDBfVFJGKHgpCSgoKHgpICYgMHhmKSA8PCA4KQorI2RlZmluZSBGVFNETUMwMjBfVFAwX1RSQ0QoeCkJKCgoeCkgJiAweDcpIDw8IDEyKQorI2RlZmluZSBGVFNETUMwMjBfVFAwX1RSUCh4KQkoKCh4KSAmIDB4ZikgPDwgMTYpCisjZGVmaW5lIEZUU0RNQzAyMF9UUDBfVFJBUyh4KQkoKCh4KSAmIDB4ZikgPDwgMjApCisKKy8qCisgKiBUaW1pbmcgUGFyYW1ldGV0IDEgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGVFNETUMwMjBfVFAxX1JFRl9JTlRWKHgpCSgoeCkgJiAweGZmZmYpCisjZGVmaW5lIEZUU0RNQzAyMF9UUDFfSU5JX1JFRlQoeCkJKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBGVFNETUMwMjBfVFAxX0lOSV9QUkVDKHgpCSgoKHgpICYgMHhmKSA8PCAyMCkKKworLyoKKyAqIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGVFNETUMwMjBfQ1JfU1JFRgkoMSA8PCAwKQorI2RlZmluZSBGVFNETUMwMjBfQ1JfUFdETgkoMSA8PCAxKQorI2RlZmluZSBGVFNETUMwMjBfQ1JfSVNNUgkoMSA8PCAyKQorI2RlZmluZSBGVFNETUMwMjBfQ1JfSVJFRgkoMSA8PCAzKQorI2RlZmluZSBGVFNETUMwMjBfQ1JfSVBSRUMJKDEgPDwgNCkKKyNkZWZpbmUgRlRTRE1DMDIwX0NSX1JFRlRZUEUJKDEgPDwgNSkKKworLyoKKyAqIFNEUkFNIEV4dGVybmFsIEJhbmsgQmFzZS9TaXplIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRlRTRE1DMDIwX0JBTktfRU5BQkxFCQkoMSA8PCAyOCkKKworI2RlZmluZSBGVFNETUMwMjBfQkFOS19CQVNFKGFkZHIpCSgoKGFkZHIpID4+IDIwKSA8PCAxNikKKworI2RlZmluZSBGVFNETUMwMjBfQkFOS19ERFdfWDQJCSgwIDw8IDEyKQorI2RlZmluZSBGVFNETUMwMjBfQkFOS19ERFdfWDgJCSgxIDw8IDEyKQorI2RlZmluZSBGVFNETUMwMjBfQkFOS19ERFdfWDE2CQkoMiA8PCAxMikKKyNkZWZpbmUgRlRTRE1DMDIwX0JBTktfRERXX1gzMgkJKDMgPDwgMTIpCisKKyNkZWZpbmUgRlRTRE1DMDIwX0JBTktfRFNaXzE2TQkJKDAgPDwgOCkKKyNkZWZpbmUgRlRTRE1DMDIwX0JBTktfRFNaXzY0TQkJKDEgPDwgOCkKKyNkZWZpbmUgRlRTRE1DMDIwX0JBTktfRFNaXzEyOE0JCSgyIDw8IDgpCisjZGVmaW5lIEZUU0RNQzAyMF9CQU5LX0RTWl8yNTZNCQkoMyA8PCA4KQorCisjZGVmaW5lIEZUU0RNQzAyMF9CQU5LX01CV184CQkoMCA8PCA0KQorI2RlZmluZSBGVFNETUMwMjBfQkFOS19NQldfMTYJCSgxIDw8IDQpCisjZGVmaW5lIEZUU0RNQzAyMF9CQU5LX01CV18zMgkJKDIgPDwgNCkKKworI2RlZmluZSBGVFNETUMwMjBfQkFOS19TSVpFXzFNCQkweDAKKyNkZWZpbmUgRlRTRE1DMDIwX0JBTktfU0laRV8yTQkJMHgxCisjZGVmaW5lIEZUU0RNQzAyMF9CQU5LX1NJWkVfNE0JCTB4MgorI2RlZmluZSBGVFNETUMwMjBfQkFOS19TSVpFXzhNCQkweDMKKyNkZWZpbmUgRlRTRE1DMDIwX0JBTktfU0laRV8xNk0JCTB4NAorI2RlZmluZSBGVFNETUMwMjBfQkFOS19TSVpFXzMyTQkJMHg1CisjZGVmaW5lIEZUU0RNQzAyMF9CQU5LX1NJWkVfNjRNCQkweDYKKyNkZWZpbmUgRlRTRE1DMDIwX0JBTktfU0laRV8xMjhNCTB4NworI2RlZmluZSBGVFNETUMwMjBfQkFOS19TSVpFXzI1Nk0JMHg4CisKKy8qCisgKiBBcmJpdGVyIENvbnRyb2wgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGVFNETUMwMjBfQUNSX1RPQyh4KQkoKHgpICYgMHgxZikKKyNkZWZpbmUgRlRTRE1DMDIwX0FDUl9UT0UJKDEgPDwgOCkKKworI2VuZGlmCS8qIF9fRlRTRE1DMDIwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWEzMjAvZnRzbWMwMjAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWEzMjAvZnRzbWMwMjAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWQ5NTAwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYTMyMC9mdHNtYzAyMC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgRmFyYWRheSBUZWNobm9sb2d5CisgKiBQby1ZdSBDaHVhbmcgPHJhdGJlcnRAZmFyYWRheS10ZWNoLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisvKgorICogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyCisgKi8KKyNpZm5kZWYgX19GVFNNQzAyMF9ICisjZGVmaW5lIF9fRlRTTUMwMjBfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgZnRzbWMwMjAgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGludAljcjsJLyogMHgwMCwgMHgwOCwgMHgxMCwgMHgxOCAqLworCQl1bnNpZ25lZCBpbnQJdHByOwkvKiAweDA0LCAweDBjLCAweDE0LCAweDFjICovCisJfSBiYW5rWzRdOworCXVuc2lnbmVkIGludAlwYWRbOF07CS8qIDB4MjAgLSAweDNjICovCisJdW5zaWduZWQgaW50CXNzcjsJLyogMHg0MCAqLworfTsKKwordm9pZCBmdHNtYzAyMF9pbml0KHZvaWQpOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKy8qCisgKiBNZW1vcnkgQmFuayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRlRTTUMwMjBfQkFOS19FTkFCTEUJKDEgPDwgMjgpCisjZGVmaW5lIEZUU01DMDIwX0JBTktfQkFTRSh4KQkoKHgpICYgMHgwZmZmMTAwMCkKKworI2RlZmluZSBGVFNNQzAyMF9CQU5LX1dQUk9UCSgxIDw8IDExKQorCisjZGVmaW5lIEZUU01DMDIwX0JBTktfU0laRV8zMksJKDB4YiA8PCA0KQorI2RlZmluZSBGVFNNQzAyMF9CQU5LX1NJWkVfNjRLCSgweGMgPDwgNCkKKyNkZWZpbmUgRlRTTUMwMjBfQkFOS19TSVpFXzEyOEsJKDB4ZCA8PCA0KQorI2RlZmluZSBGVFNNQzAyMF9CQU5LX1NJWkVfMjU2SwkoMHhlIDw8IDQpCisjZGVmaW5lIEZUU01DMDIwX0JBTktfU0laRV81MTJLCSgweGYgPDwgNCkKKyNkZWZpbmUgRlRTTUMwMjBfQkFOS19TSVpFXzFNCSgweDAgPDwgNCkKKyNkZWZpbmUgRlRTTUMwMjBfQkFOS19TSVpFXzJNCSgweDEgPDwgNCkKKyNkZWZpbmUgRlRTTUMwMjBfQkFOS19TSVpFXzRNCSgweDIgPDwgNCkKKyNkZWZpbmUgRlRTTUMwMjBfQkFOS19TSVpFXzhNCSgweDMgPDwgNCkKKyNkZWZpbmUgRlRTTUMwMjBfQkFOS19TSVpFXzE2TQkoMHg0IDw8IDQpCisjZGVmaW5lIEZUU01DMDIwX0JBTktfU0laRV8zMk0JKDB4NSA8PCA0KQorCisjZGVmaW5lIEZUU01DMDIwX0JBTktfTUJXXzgJKDB4MCA8PCAwKQorI2RlZmluZSBGVFNNQzAyMF9CQU5LX01CV18xNgkoMHgxIDw8IDApCisjZGVmaW5lIEZUU01DMDIwX0JBTktfTUJXXzMyCSgweDIgPDwgMCkKKworLyoKKyAqIE1lbW9yeSBCYW5rIFRpbWluZyBQYXJhbWV0ZXIgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBGVFNNQzAyMF9UUFJfRVRSTkEoeCkJKCgoeCkgJiAweGYpIDw8IDI4KQorI2RlZmluZSBGVFNNQzAyMF9UUFJfRUFUSSh4KQkoKCh4KSAmIDB4ZikgPDwgMjQpCisjZGVmaW5lIEZUU01DMDIwX1RQUl9SQkUJKDEgPDwgMjApCisjZGVmaW5lIEZUU01DMDIwX1RQUl9BU1QoeCkJKCgoeCkgJiAweDMpIDw8IDE4KQorI2RlZmluZSBGVFNNQzAyMF9UUFJfQ1RXKHgpCSgoKHgpICYgMHgzKSA8PCAxNikKKyNkZWZpbmUgRlRTTUMwMjBfVFBSX0FUSSh4KQkoKCh4KSAmIDB4ZikgPDwgMTIpCisjZGVmaW5lIEZUU01DMDIwX1RQUl9BVDIoeCkJKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lIEZUU01DMDIwX1RQUl9XVEMoeCkJKCgoeCkgJiAweDMpIDw8IDYpCisjZGVmaW5lIEZUU01DMDIwX1RQUl9BSFQoeCkJKCgoeCkgJiAweDMpIDw8IDQpCisjZGVmaW5lIEZUU01DMDIwX1RQUl9UUk5BKHgpCSgoKHgpICYgMHhmKSA8PCAwKQorCisjZW5kaWYJLyogX19GVFNNQzAyMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hMzIwL2Z0dG1yMDEwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hMzIwL2Z0dG1yMDEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhYmNiMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWEzMjAvZnR0bXIwMTAuaApAQCAtMCwwICsxLDczIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5IEZhcmFkYXkgVGVjaG5vbG9neQorICogUG8tWXUgQ2h1YW5nIDxyYXRiZXJ0QGZhcmFkYXktdGVjaC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIFRpbWVyCisgKi8KKyNpZm5kZWYgX19GVFRNUjAxMF9ICisjZGVmaW5lIF9fRlRUTVIwMTBfSAorCitzdHJ1Y3QgZnR0bXIwMTAgeworCXVuc2lnbmVkIGludAl0aW1lcjFfY291bnRlcjsJCS8qIDB4MDAgKi8KKwl1bnNpZ25lZCBpbnQJdGltZXIxX2xvYWQ7CQkvKiAweDA0ICovCisJdW5zaWduZWQgaW50CXRpbWVyMV9tYXRjaDE7CQkvKiAweDA4ICovCisJdW5zaWduZWQgaW50CXRpbWVyMV9tYXRjaDI7CQkvKiAweDBjICovCisJdW5zaWduZWQgaW50CXRpbWVyMl9jb3VudGVyOwkJLyogMHgxMCAqLworCXVuc2lnbmVkIGludAl0aW1lcjJfbG9hZDsJCS8qIDB4MTQgKi8KKwl1bnNpZ25lZCBpbnQJdGltZXIyX21hdGNoMTsJCS8qIDB4MTggKi8KKwl1bnNpZ25lZCBpbnQJdGltZXIyX21hdGNoMjsJCS8qIDB4MWMgKi8KKwl1bnNpZ25lZCBpbnQJdGltZXIzX2NvdW50ZXI7CQkvKiAweDIwICovCisJdW5zaWduZWQgaW50CXRpbWVyM19sb2FkOwkJLyogMHgyNCAqLworCXVuc2lnbmVkIGludAl0aW1lcjNfbWF0Y2gxOwkJLyogMHgyOCAqLworCXVuc2lnbmVkIGludAl0aW1lcjNfbWF0Y2gyOwkJLyogMHgyYyAqLworCXVuc2lnbmVkIGludAljcjsJCQkvKiAweDMwICovCisJdW5zaWduZWQgaW50CWludGVycnVwdF9zdGF0ZTsJLyogMHgzNCAqLworCXVuc2lnbmVkIGludAlpbnRlcnJ1cHRfbWFzazsJCS8qIDB4MzggKi8KK307CisKKy8qCisgKiBUaW1lciBDb250cm9sIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgRlRUTVIwMTBfVE0zX1VQRE9XTgkoMSA8PCAxMSkKKyNkZWZpbmUgRlRUTVIwMTBfVE0yX1VQRE9XTgkoMSA8PCAxMCkKKyNkZWZpbmUgRlRUTVIwMTBfVE0xX1VQRE9XTgkoMSA8PCA5KQorI2RlZmluZSBGVFRNUjAxMF9UTTNfT0ZFTkFCTEUJKDEgPDwgOCkKKyNkZWZpbmUgRlRUTVIwMTBfVE0zX0NMT0NLCSgxIDw8IDcpCisjZGVmaW5lIEZUVE1SMDEwX1RNM19FTkFCTEUJKDEgPDwgNikKKyNkZWZpbmUgRlRUTVIwMTBfVE0yX09GRU5BQkxFCSgxIDw8IDUpCisjZGVmaW5lIEZUVE1SMDEwX1RNMl9DTE9DSwkoMSA8PCA0KQorI2RlZmluZSBGVFRNUjAxMF9UTTJfRU5BQkxFCSgxIDw8IDMpCisjZGVmaW5lIEZUVE1SMDEwX1RNMV9PRkVOQUJMRQkoMSA8PCAyKQorI2RlZmluZSBGVFRNUjAxMF9UTTFfQ0xPQ0sJKDEgPDwgMSkKKyNkZWZpbmUgRlRUTVIwMTBfVE0xX0VOQUJMRQkoMSA8PCAwKQorCisvKgorICogVGltZXIgSW50ZXJydXB0IFN0YXRlICYgTWFzayBSZWdpc3RlcnMKKyAqLworI2RlZmluZSBGVFRNUjAxMF9UTTNfT1ZFUkZMT1cJKDEgPDwgOCkKKyNkZWZpbmUgRlRUTVIwMTBfVE0zX01BVENIMgkoMSA8PCA3KQorI2RlZmluZSBGVFRNUjAxMF9UTTNfTUFUQ0gxCSgxIDw8IDYpCisjZGVmaW5lIEZUVE1SMDEwX1RNMl9PVkVSRkxPVwkoMSA8PCA1KQorI2RlZmluZSBGVFRNUjAxMF9UTTJfTUFUQ0gyCSgxIDw8IDQpCisjZGVmaW5lIEZUVE1SMDEwX1RNMl9NQVRDSDEJKDEgPDwgMykKKyNkZWZpbmUgRlRUTVIwMTBfVE0xX09WRVJGTE9XCSgxIDw8IDIpCisjZGVmaW5lIEZUVE1SMDEwX1RNMV9NQVRDSDIJKDEgPDwgMSkKKyNkZWZpbmUgRlRUTVIwMTBfVE0xX01BVENIMQkoMSA8PCAwKQorCisjZW5kaWYJLyogX19GVFRNUjAxMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2hhcmR3YXJlLmgKaW5kZXggYWNmMTJlYS4uODFjYzhhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvaGFyZHdhcmUuaApAQCAtNDksNiArNDksOCBAQAogICogb24gb3RoZXIgRGFWaW5jaSBjaGlwcy4gIERvdWJsZSBjaGVjayB0aGVtIGJlZm9yZSB5b3UgdHJ5CiAgKiB1c2luZyB0aGUgYWRkcmVzc2VzIC4uLiBvciBQU0MgbW9kdWxlIGlkZW50aWZpZXJzLCBldGMuCiAgKi8KKyNpZm5kZWYgQ09ORklHX1NPQ19EQThYWAorCiAjZGVmaW5lIERBVklOQ0lfRE1BXzNQQ0NfQkFTRQkJCSgweDAxYzAwMDAwKQogI2RlZmluZSBEQVZJTkNJX0RNQV8zUFRDMF9CQVNFCQkJKDB4MDFjMTAwMDApCiAjZGVmaW5lIERBVklOQ0lfRE1BXzNQVEMxX0JBU0UJCQkoMHgwMWMxMDQwMCkKQEAgLTExNiwxMCArMTE4LDQ2IEBACiAKICNlbmRpZgogCisjZWxzZSAvKiBDT05GSUdfU09DX0RBOFhYICovCisKKyNkZWZpbmUgREFWSU5DSV9VQVJUMF9CQVNFCQkJMHgwMWM0MjAwMAorI2RlZmluZSBEQVZJTkNJX1VBUlQxX0JBU0UJCQkweDAxZDBjMDAwCisjZGVmaW5lIERBVklOQ0lfVUFSVDJfQkFTRQkJCTB4MDFkMGQwMDAKKyNkZWZpbmUgREFWSU5DSV9JMkMwX0JBU0UJCQkweDAxYzIyMDAwCisjZGVmaW5lIERBVklOQ0lfSTJDMV9CQVNFCQkJMHgwMWUyODAwMAorI2RlZmluZSBEQVZJTkNJX1RJTUVSMF9CQVNFCQkJMHgwMWMyMDAwMAorI2RlZmluZSBEQVZJTkNJX1RJTUVSMV9CQVNFCQkJMHgwMWMyMTAwMAorI2RlZmluZSBEQVZJTkNJX1dET0dfQkFTRQkJCTB4MDFjMjEwMDAKKyNkZWZpbmUgREFWSU5DSV9QTExfQ05UUkwwX0JBU0UJCQkweDAxYzExMDAwCisjZGVmaW5lIERBVklOQ0lfUFNDMF9CQVNFCQkJMHgwMWMxMDAwMAorI2RlZmluZSBEQVZJTkNJX1BTQzFfQkFTRQkJCTB4MDFlMjcwMDAKKyNkZWZpbmUgREFWSU5DSV9TUEkwX0JBU0UJCQkweDAxYzQxMDAwCisjZGVmaW5lIERBVklOQ0lfVVNCX09UR19CQVNFCQkJMHgwMWUwMDAwMAorI2RlZmluZSBEQVZJTkNJX1NQSTFfQkFTRQkJCTB4MDFlMTIwMDAKKyNkZWZpbmUgREFWSU5DSV9HUElPX0JBU0UJCQkweDAxZTI2MDAwCisjZGVmaW5lIERBVklOQ0lfRU1BQ19DTlRSTF9SRUdTX0JBU0UJCTB4MDFlMjMwMDAKKyNkZWZpbmUgREFWSU5DSV9FTUFDX1dSQVBQRVJfQ05UUkxfUkVHU19CQVNFCTB4MDFlMjIwMDAKKyNkZWZpbmUgREFWSU5DSV9FTUFDX1dSQVBQRVJfUkFNX0JBU0UJCTB4MDFlMjAwMDAKKyNkZWZpbmUgREFWSU5DSV9NRElPX0NOVFJMX1JFR1NfQkFTRQkJMHgwMWUyNDAwMAorI2RlZmluZSBEQVZJTkNJX0FTWU5DX0VNSUZfQ05UUkxfQkFTRQkJMHg2ODAwMDAwMAorI2RlZmluZSBEQVZJTkNJX0FTWU5DX0VNSUZfREFUQV9DRTBfQkFTRQkweDQwMDAwMDAwCisjZGVmaW5lIERBVklOQ0lfQVNZTkNfRU1JRl9EQVRBX0NFMl9CQVNFCTB4NjAwMDAwMDAKKyNkZWZpbmUgREFWSU5DSV9BU1lOQ19FTUlGX0RBVEFfQ0UzX0JBU0UJMHg2MjAwMDAwMAorI2RlZmluZSBEQVZJTkNJX0FTWU5DX0VNSUZfREFUQV9DRTRfQkFTRQkweDY0MDAwMDAwCisjZGVmaW5lIERBVklOQ0lfQVNZTkNfRU1JRl9EQVRBX0NFNV9CQVNFCTB4NjYwMDAwMDAKKyNkZWZpbmUgREFWSU5DSV9ERFJfRU1JRl9DVFJMX0JBU0UJCTB4YjAwMDAwMDAKKyNkZWZpbmUgREFWSU5DSV9ERFJfRU1JRl9EQVRBX0JBU0UJCTB4YzAwMDAwMDAKKyNkZWZpbmUgREFWSU5DSV9JTlRDX0JBU0UJCQkweGZmZmVlMDAwCisjZGVmaW5lIERBVklOQ0lfQk9PVENGR19CQVNFCQkJMHgwMWMxNDAwMAorCisjZW5kaWYgLyogQ09ORklHX1NPQ19EQThYWCAqLworCiAvKiBQb3dlciBhbmQgU2xlZXAgQ29udHJvbGxlciAoUFNDKSBEb21haW5zICovCiAjZGVmaW5lIERBVklOQ0lfR1BTQ19BUk1ET01BSU4JCTAKICNkZWZpbmUgREFWSU5DSV9HUFNDX0RTUERPTUFJTgkJMQogCisjaWZuZGVmIENPTkZJR19TT0NfREE4WFgKKwogI2RlZmluZSBEQVZJTkNJX0xQU0NfVlBTU01TVFIJCTAKICNkZWZpbmUgREFWSU5DSV9MUFNDX1ZQU1NTTFYJCTEKICNkZWZpbmUgREFWSU5DSV9MUFNDX1RQQ0MJCTIKQEAgLTE2Niw2ICsyMDQsNTIgQEAKICNkZWZpbmUgREFWSU5DSV9ETTY0NlhfTFBTQ19VQVJUMAkyNgogI2RlZmluZSBEQVZJTkNJX0RNNjQ2WF9MUFNDX0kyQwkJMzEKIAorI2Vsc2UgLyogQ09ORklHX1NPQ19EQThYWCAqLworCitlbnVtIGRhdmluY2lfbHBzY19pZHMgeworCURBVklOQ0lfTFBTQ19UUENDID0gMCwKKwlEQVZJTkNJX0xQU0NfVFBUQzAsCisJREFWSU5DSV9MUFNDX1RQVEMxLAorCURBVklOQ0lfTFBTQ19BRU1JRiwKKwlEQVZJTkNJX0xQU0NfU1BJMCwKKwlEQVZJTkNJX0xQU0NfTU1DX1NELAorCURBVklOQ0lfTFBTQ19BSU5UQywKKwlEQVZJTkNJX0xQU0NfQVJNX1JBTV9ST00sCisJREFWSU5DSV9MUFNDX1NFQ0NUTF9LRVlNR1IsCisJREFWSU5DSV9MUFNDX1VBUlQwLAorCURBVklOQ0lfTFBTQ19TQ1IwLAorCURBVklOQ0lfTFBTQ19TQ1IxLAorCURBVklOQ0lfTFBTQ19TQ1IyLAorCURBVklOQ0lfTFBTQ19ETUFYLAorCURBVklOQ0lfTFBTQ19BUk0sCisJREFWSU5DSV9MUFNDX0dFTSwKKwkvKiBmb3IgTFBTQ3MgaW4gUFNDMSwgb2Zmc2V0IGZyb20gMzIgZm9yIGRpZmZlcmVudGlhdGlvbiAqLworCURBVklOQ0lfTFBTQ19QU0MxX0JBU0UgPSAzMiwKKwlEQVZJTkNJX0xQU0NfVVNCMTEsCisJREFWSU5DSV9MUFNDX1VTQjIwLAorCURBVklOQ0lfTFBTQ19HUElPLAorCURBVklOQ0lfTFBTQ19VSFBJLAorCURBVklOQ0lfTFBTQ19FTUFDLAorCURBVklOQ0lfTFBTQ19ERFJfRU1JRiwKKwlEQVZJTkNJX0xQU0NfTWNBU1AwLAorCURBVklOQ0lfTFBTQ19NY0FTUDEsCisJREFWSU5DSV9MUFNDX01jQVNQMiwKKwlEQVZJTkNJX0xQU0NfU1BJMSwKKwlEQVZJTkNJX0xQU0NfSTJDMSwKKwlEQVZJTkNJX0xQU0NfVUFSVDEsCisJREFWSU5DSV9MUFNDX1VBUlQyLAorCURBVklOQ0lfTFBTQ19MQ0RDLAorCURBVklOQ0lfTFBTQ19lUFdNLAorCURBVklOQ0lfTFBTQ19lQ0FQLAorCURBVklOQ0lfTFBTQ19lUUVQLAorCURBVklOQ0lfTFBTQ19TQ1JfUDAsCisJREFWSU5DSV9MUFNDX1NDUl9QMSwKKwlEQVZJTkNJX0xQU0NfQ1JfUDMsCisJREFWSU5DSV9MUFNDX0wzX0NCQV9SQU0KK307CisKKyNlbmRpZiAvKiBDT05GSUdfU09DX0RBOFhYICovCisKIHZvaWQgbHBzY19vbih1bnNpZ25lZCBpbnQgaWQpOwogdm9pZCBkc3Bfb24odm9pZCk7CiAKQEAgLTE3NCw2ICsyNTgsOCBAQAogdm9pZCBkYXZpbmNpX2VuYWJsZV9pMmModm9pZCk7CiB2b2lkIGRhdmluY2lfZXJyYXRhX3dvcmthcm91bmRzKHZvaWQpOwogCisjaWZuZGVmIENPTkZJR19TT0NfREE4WFgKKwogLyogU29tZSBQU0MgZGVmaW5lcyAqLwogI2RlZmluZSBQU0NfQ0hQX1NIUlRTVwkJCSgweDAxYzQwMDM4KQogI2RlZmluZSBQU0NfR0JMQ1RMCQkJKDB4MDFjNDEwMTApCkBAIC0xOTQsNiArMjgwLDM5IEBACiAKICNkZWZpbmUgUFNDX1NJTFZFUl9CVUxMRVQJCSgweDAxYzQxYTIwKQogCisjZWxzZSAvKiBDT05GSUdfU09DX0RBOFhYICovCisKKyNkZWZpbmUgUFNDX1BTQzBfTU9EVUxFX0lEX0NOVAkJMTYKKyNkZWZpbmUgUFNDX1BTQzFfTU9EVUxFX0lEX0NOVAkJMzIKKworc3RydWN0IGRhdmluY2lfcHNjX3JlZ3MgeworCWR2X3JlZwlyZXZpZDsKKwlkdl9yZWcJcnN2ZDBbNzFdOworCWR2X3JlZwlwdGNtZDsKKwlkdl9yZWcJcnN2ZDE7CisJZHZfcmVnCXB0c3RhdDsKKwlkdl9yZWcJcnN2ZDJbNDM3XTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlkdl9yZWcJbWRzdGF0W1BTQ19QU0MwX01PRFVMRV9JRF9DTlRdOworCQkJZHZfcmVnCXJzdmQzWzExMl07CisJCQlkdl9yZWcJbWRjdGxbUFNDX1BTQzBfTU9EVUxFX0lEX0NOVF07CisJCX0gcHNjMDsKKwkJc3RydWN0IHsKKwkJCWR2X3JlZwltZHN0YXRbUFNDX1BTQzFfTU9EVUxFX0lEX0NOVF07CisJCQlkdl9yZWcJcnN2ZDNbOTZdOworCQkJZHZfcmVnCW1kY3RsW1BTQ19QU0MxX01PRFVMRV9JRF9DTlRdOworCQl9IHBzYzE7CisJfTsKK307CisKKyNkZWZpbmUgZGF2aW5jaV9wc2MwX3JlZ3MgKChzdHJ1Y3QgZGF2aW5jaV9wc2NfcmVncyAqKURBVklOQ0lfUFNDMF9CQVNFKQorI2RlZmluZSBkYXZpbmNpX3BzYzFfcmVncyAoKHN0cnVjdCBkYXZpbmNpX3BzY19yZWdzICopREFWSU5DSV9QU0MxX0JBU0UpCisKKyNlbmRpZiAvKiBDT05GSUdfU09DX0RBOFhYICovCisKKyNpZm5kZWYgQ09ORklHX1NPQ19EQThYWAorCiAvKiBNaXNjZWxsYW5pYS4uLiAqLwogI2RlZmluZSBWQlBSCQkJCSgweDIwMDAwMDIwKQogCkBAIC0yMDYsNCArMzI1LDEyMiBAQAogI2RlZmluZSBQSU5NVVgzCQkJCTB4MDFjNDAwMGMKICNkZWZpbmUgUElOTVVYNAkJCQkweDAxYzQwMDEwCiAKKyNlbHNlIC8qIENPTkZJR19TT0NfREE4WFggKi8KKworc3RydWN0IGRhdmluY2lfcGxsY19yZWdzIHsKKwlkdl9yZWcJcmV2aWQ7CisJZHZfcmVnCXJzdmQxWzU2XTsKKwlkdl9yZWcJcnN0eXBlOworCWR2X3JlZwlyc3ZkMls2XTsKKwlkdl9yZWcJcGxsY3RsOworCWR2X3JlZwlvY3NlbDsKKwlkdl9yZWcJcnN2ZDNbMl07CisJZHZfcmVnCXBsbG07CisJZHZfcmVnCXByZWRpdjsKKwlkdl9yZWcJcGxsZGl2MTsKKwlkdl9yZWcJcGxsZGl2MjsKKwlkdl9yZWcJcGxsZGl2MzsKKwlkdl9yZWcJb3NjZGl2OworCWR2X3JlZwlwb3N0ZGl2OworCWR2X3JlZwlyc3ZkNFszXTsKKwlkdl9yZWcJcGxsY21kOworCWR2X3JlZwlwbGxzdGF0OworCWR2X3JlZwlhbG5jdGw7CisJZHZfcmVnCWRjaGFuZ2U7CisJZHZfcmVnCWNrZW47CisJZHZfcmVnCWNrc3RhdDsKKwlkdl9yZWcJc3lzdGF0OworCWR2X3JlZwlyc3ZkNVszXTsKKwlkdl9yZWcJcGxsZGl2NDsKKwlkdl9yZWcJcGxsZGl2NTsKKwlkdl9yZWcJcGxsZGl2NjsKKwlkdl9yZWcJcGxsZGl2NzsKKwlkdl9yZWcJcnN2ZDZbMzJdOworCWR2X3JlZwllbXVjbnQwOworCWR2X3JlZwllbXVjbnQxOworfTsKKworI2RlZmluZSBkYXZpbmNpX3BsbGNfcmVncyAoKHN0cnVjdCBkYXZpbmNpX3BsbGNfcmVncyAqKURBVklOQ0lfUExMX0NOVFJMMF9CQVNFKQorI2RlZmluZSBEQVZJTkNJX1BMTENfRElWX01BU0sJMHgxZgorCisvKiBDbG9jayBJRHMgKi8KK2VudW0gZGF2aW5jaV9jbGtfaWRzIHsKKwlEQVZJTkNJX1NQSTBfQ0xLSUQgPSAyLAorCURBVklOQ0lfVUFSVDJfQ0xLSUQgPSAyLAorCURBVklOQ0lfTURJT19DTEtJRCA9IDQsCisJREFWSU5DSV9BUk1fQ0xLSUQgPSA2LAorCURBVklOQ0lfUExMTV9DTEtJRCA9IDB4ZmYsCisJREFWSU5DSV9QTExDX0NMS0lEID0gMHgxMDAsCisJREFWSU5DSV9BVVhDTEtfQ0xLSUQgPSAweDEwMQorfTsKKworaW50IGNsa19nZXQoZW51bSBkYXZpbmNpX2Nsa19pZHMgaWQpOworCisvKiBCb290IGNvbmZpZyAqLworc3RydWN0IGRhdmluY2lfc3lzY2ZnX3JlZ3MgeworCWR2X3JlZwlyZXZpZDsKKwlkdl9yZWcJcnN2ZFs3MV07CisJZHZfcmVnCXBpbm11eFsyMF07CisJZHZfcmVnCXN1c3BzcmM7CisJZHZfcmVnCWNoaXBzaWc7CisJZHZfcmVnCWNoaXBzaWdfY2xyOworCWR2X3JlZwljZmdjaGlwMDsKKwlkdl9yZWcJY2ZnY2hpcDE7CisJZHZfcmVnCWNmZ2NoaXAyOworCWR2X3JlZwljZmdjaGlwMzsKKwlkdl9yZWcJY2ZnY2hpcDQ7Cit9OworCisjZGVmaW5lIGRhdmluY2lfc3lzY2ZnX3JlZ3MgXAorCSgoc3RydWN0IGRhdmluY2lfc3lzY2ZnX3JlZ3MgKilEQVZJTkNJX0JPT1RDRkdfQkFTRSkKKworLyogRW11bGF0aW9uIHN1c3BlbmQgYml0cyAqLworI2RlZmluZSBEQVZJTkNJX1NZU0NGR19TVVNQU1JDX0VNQUMJCSgxIDw8IDUpCisjZGVmaW5lIERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfSTJDCQkoMSA8PCAxNikKKyNkZWZpbmUgREFWSU5DSV9TWVNDRkdfU1VTUFNSQ19TUEkwCQkoMSA8PCAyMSkKKyNkZWZpbmUgREFWSU5DSV9TWVNDRkdfU1VTUFNSQ19VQVJUMgkJKDEgPDwgMjApCisjZGVmaW5lIERBVklOQ0lfU1lTQ0ZHX1NVU1BTUkNfVElNRVIwCQkoMSA8PCAyNykKKworLyogSW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KK3N0cnVjdCBkYXZpbmNpX2FpbnRjX3JlZ3MgeworCWR2X3JlZwlyZXZpZDsKKwlkdl9yZWcJY3I7CisJZHZfcmVnCWR1bW15MFsyXTsKKwlkdl9yZWcJZ2VyOworCWR2X3JlZwlkdW1teTFbMjE5XTsKKwlkdl9yZWcJZWNyMTsKKwlkdl9yZWcJZWNyMjsKKwlkdl9yZWcJZWNyMzsKKwlkdl9yZWcJZHVtbXkyWzExMTddOworCWR2X3JlZwloaWVyOworfTsKKworI2RlZmluZSBkYXZpbmNpX2FpbnRjX3JlZ3MgKChzdHJ1Y3QgZGF2aW5jaV9haW50Y19yZWdzICopREFWSU5DSV9JTlRDX0JBU0UpCisKK3N0cnVjdCBkYXZpbmNpX3VhcnRfY3RybF9yZWdzIHsKKwlkdl9yZWcJcmV2aWQxOworCWR2X3JlZwlyZXZpZDI7CisJZHZfcmVnCXB3cmVtdV9tZ210OworCWR2X3JlZwltZHI7Cit9OworCisjZGVmaW5lIERBVklOQ0lfVUFSVF9DVFJMX0JBU0UgMHgyOAorI2RlZmluZSBEQVZJTkNJX1VBUlQwX0NUUkxfQUREUiAoREFWSU5DSV9VQVJUMF9CQVNFICsgREFWSU5DSV9VQVJUX0NUUkxfQkFTRSkKKyNkZWZpbmUgREFWSU5DSV9VQVJUMV9DVFJMX0FERFIgKERBVklOQ0lfVUFSVDFfQkFTRSArIERBVklOQ0lfVUFSVF9DVFJMX0JBU0UpCisjZGVmaW5lIERBVklOQ0lfVUFSVDJfQ1RSTF9BRERSIChEQVZJTkNJX1VBUlQyX0JBU0UgKyBEQVZJTkNJX1VBUlRfQ1RSTF9CQVNFKQorCisjZGVmaW5lIGRhdmluY2lfdWFydDBfY3RybF9yZWdzIFwKKwkoKHN0cnVjdCBkYXZpbmNpX3VhcnRfY3RybF9yZWdzICopREFWSU5DSV9VQVJUMF9DVFJMX0FERFIpCisjZGVmaW5lIGRhdmluY2lfdWFydDFfY3RybF9yZWdzIFwKKwkoKHN0cnVjdCBkYXZpbmNpX3VhcnRfY3RybF9yZWdzICopREFWSU5DSV9VQVJUMV9DVFJMX0FERFIpCisjZGVmaW5lIGRhdmluY2lfdWFydDJfY3RybF9yZWdzIFwKKwkoKHN0cnVjdCBkYXZpbmNpX3VhcnRfY3RybF9yZWdzICopREFWSU5DSV9VQVJUMl9DVFJMX0FERFIpCisKKy8qIFVBUlQgUFdSRU1VX01HTVQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX0ZSRUUJKDEgPDwgMCkKKyNkZWZpbmUgREFWSU5DSV9VQVJUX1BXUkVNVV9NR01UX1VSUlNUCSgxIDw8IDEzKQorI2RlZmluZSBEQVZJTkNJX1VBUlRfUFdSRU1VX01HTVRfVVRSU1QJKDEgPDwgMTQpCisKKyNlbmRpZiAvKiBDT05GSUdfU09DX0RBOFhYICovCisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvaTJjX2RlZnMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWRhdmluY2kvaTJjX2RlZnMuaAppbmRleCAyZTkwMmUxLi4yNGNkMjY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1kYXZpbmNpL2kyY19kZWZzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZGF2aW5jaS9pMmNfZGVmcy5oCkBAIC0yOCw3ICsyOCwxMSBAQAogI2RlZmluZSBJMkNfV1JJVEUJCTAKICNkZWZpbmUgSTJDX1JFQUQJCTEKIAorI2lmbmRlZiBDT05GSUdfU09DX0RBOFhYCiAjZGVmaW5lIEkyQ19CQVNFCQkweDAxYzIxMDAwCisjZWxzZQorI2RlZmluZSBJMkNfQkFTRQkJMHgwMWMyMjAwMAorI2VuZGlmCiAKICNkZWZpbmUJSTJDX09BCQkJKEkyQ19CQVNFICsgMHgwMCkKICNkZWZpbmUgSTJDX0lFCQkJKEkyQ19CQVNFICsgMHgwNCkKQEAgLTg4LDYgKzkyLDcgQEAKICNkZWZpbmUgSTJDX0NPTl9YQQkoMSA8PCA4KQkvKiBFeHBhbmQgYWRkcmVzcyAqLwogI2RlZmluZSBJMkNfQ09OX1NUUAkoMSA8PCAxMSkJLyogU3RvcCBjb25kaXRpb24gKG1hc3RlciBtb2RlIG9ubHkpICovCiAjZGVmaW5lIEkyQ19DT05fU1RUCSgxIDw8IDEzKQkvKiBTdGFydCBjb25kaXRpb24gKG1hc3RlciBtb2RlIG9ubHkpICovCisjZGVmaW5lIEkyQ19DT05fRlJFRQkoMSA8PCAxNCkJLyogRnJlZSBydW4gb24gZW11bGF0aW9uICovCiAKICNkZWZpbmUgSTJDX1RJTUVPVVQJMHhmZmZmMDAwMAkvKiBUaW1lb3V0IG1hc2sgZm9yIHBvbGxfaTJjX2lycSgpICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAyNHh4L2kyYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDI0eHgvaTJjLmgKaW5kZXggNDRkYjdhMi4uMTkwNDZhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDI0eHgvaTJjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDI0eHgvaTJjLmgKQEAgLTIzLDI0ICsyMyw0NSBAQAogI2lmbmRlZiBfT01BUDI0WFhfSTJDX0hfCiAjZGVmaW5lIF9PTUFQMjRYWF9JMkNfSF8KIAotI2RlZmluZSBJMkNfQkFTRSAgICAgICAgICAgICAgICAweDQ4MDcwMDAwCisjZGVmaW5lIEkyQ19CQVNFMQkJMHg0ODA3MDAwMAogI2RlZmluZSBJMkNfQkFTRTIgICAgICAgICAgICAgICAweDQ4MDcyMDAwIC8qIG5vdGhpbmcgaG9va2VkIHVwIG9uIGg0ICovCiAKLSNkZWZpbmUgSTJDX1JFViAgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgwMCkKLSNkZWZpbmUgSTJDX0lFICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgwNCkKLSNkZWZpbmUgSTJDX1NUQVQgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgwOCkKLSNkZWZpbmUgSTJDX0lWICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgwYykKLSNkZWZpbmUgSTJDX0JVRiAgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgxNCkKLSNkZWZpbmUgSTJDX0NOVCAgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgxOCkKLSNkZWZpbmUgSTJDX0RBVEEgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgxYykKLSNkZWZpbmUgSTJDX1NZU0MgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgyMCkKLSNkZWZpbmUgSTJDX0NPTiAgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgyNCkKLSNkZWZpbmUgSTJDX09BICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgyOCkKLSNkZWZpbmUgSTJDX1NBICAgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgyYykKLSNkZWZpbmUgSTJDX1BTQyAgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgzMCkKLSNkZWZpbmUgSTJDX1NDTEwgICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgzNCkKLSNkZWZpbmUgSTJDX1NDTEggICAgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgzOCkKLSNkZWZpbmUgSTJDX1NZU1RFU1QgICAgICAgICAgICAgKEkyQ19CQVNFICsgMHgzYykKKyNkZWZpbmUgSTJDX0RFRkFVTFRfQkFTRQlJMkNfQkFTRTEKKworc3RydWN0IGkyYyB7CisJdW5zaWduZWQgc2hvcnQgcmV2OwkvKiAweDAwICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTsKKwl1bnNpZ25lZCBzaG9ydCBpZTsJLyogMHgwNCAqLworCXVuc2lnbmVkIHNob3J0IHJlczI7CisJdW5zaWduZWQgc2hvcnQgc3RhdDsJLyogMHgwOCAqLworCXVuc2lnbmVkIHNob3J0IHJlczM7CisJdW5zaWduZWQgc2hvcnQgaXY7CS8qIDB4MEMgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXM0WzNdOworCXVuc2lnbmVkIHNob3J0IGJ1ZjsJLyogMHgxNCAqLworCXVuc2lnbmVkIHNob3J0IHJlczU7CisJdW5zaWduZWQgc2hvcnQgY250OwkvKiAweDE4ICovCisJdW5zaWduZWQgc2hvcnQgcmVzNjsKKwl1bnNpZ25lZCBzaG9ydCBkYXRhOwkvKiAweDFDICovCisJdW5zaWduZWQgc2hvcnQgcmVzNzsKKwl1bnNpZ25lZCBzaG9ydCBzeXNjOwkvKiAweDIwICovCisJdW5zaWduZWQgc2hvcnQgcmVzODsKKwl1bnNpZ25lZCBzaG9ydCBjb247CS8qIDB4MjQgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXM5OworCXVuc2lnbmVkIHNob3J0IG9hOwkvKiAweDI4ICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTA7CisJdW5zaWduZWQgc2hvcnQgc2E7CS8qIDB4MkMgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMxMTsKKwl1bnNpZ25lZCBzaG9ydCBwc2M7CS8qIDB4MzAgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMxMjsKKwl1bnNpZ25lZCBzaG9ydCBzY2xsOwkvKiAweDM0ICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTM7CisJdW5zaWduZWQgc2hvcnQgc2NsaDsJLyogMHgzOCAqLworCXVuc2lnbmVkIHNob3J0IHJlczE0OworCXVuc2lnbmVkIHNob3J0IHN5c3Rlc3Q7CS8qIDB4M2MgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMxNTsKK307CisKKyNkZWZpbmUgSTJDX0JVU19NQVgJMgogCiAvKiBJMkMgbWFza3MgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvY3B1LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9jcHUuaAppbmRleCA4YWIyZTM5Li5lNTFjNGYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9jcHUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwMy9jcHUuaApAQCAtMjIyLDYgKzIyMiw3IEBACiAKICNkZWZpbmUgUEFHRVBPTElDWV9ISUdICQkoMHgxIDw8IDApCiAjZGVmaW5lIFNSRlJPTlJFU0VUCQkoMHgxIDw8IDcpCisjZGVmaW5lIFBXRE5FTgkJCSgweDEgPDwgMikKICNkZWZpbmUgV0FLRVVQUFJPQwkJKDB4MSA8PCAyNikKIAogI2RlZmluZSBERFJfU0RSQU0JCSgweDEgPDwgMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL2kyYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvaTJjLmgKaW5kZXggOGIzMzljYy4uNDkwZTAzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvaTJjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvaTJjLmgKQEAgLTI1LDIxICsyNSw0MCBAQAogCiAjZGVmaW5lIEkyQ19ERUZBVUxUX0JBU0UJSTJDX0JBU0UxCiAKLSNkZWZpbmUgSTJDX1JFVgkJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDAwKQotI2RlZmluZSBJMkNfSUUgCQkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MDQpCi0jZGVmaW5lIEkyQ19TVEFUCShJMkNfREVGQVVMVF9CQVNFICsgMHgwOCkKLSNkZWZpbmUgSTJDX0lWIAkJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDBjKQotI2RlZmluZSBJMkNfQlVGCQkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MTQpCi0jZGVmaW5lIEkyQ19DTlQJCShJMkNfREVGQVVMVF9CQVNFICsgMHgxOCkKLSNkZWZpbmUgSTJDX0RBVEEJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDFjKQotI2RlZmluZSBJMkNfU1lTQwkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MjApCi0jZGVmaW5lIEkyQ19DT04JCShJMkNfREVGQVVMVF9CQVNFICsgMHgyNCkKLSNkZWZpbmUgSTJDX09BIAkJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDI4KQotI2RlZmluZSBJMkNfU0EgCQkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MmMpCi0jZGVmaW5lIEkyQ19QU0MJCShJMkNfREVGQVVMVF9CQVNFICsgMHgzMCkKLSNkZWZpbmUgSTJDX1NDTEwJKEkyQ19ERUZBVUxUX0JBU0UgKyAweDM0KQotI2RlZmluZSBJMkNfU0NMSAkoSTJDX0RFRkFVTFRfQkFTRSArIDB4MzgpCi0jZGVmaW5lIEkyQ19TWVNURVNUCShJMkNfREVGQVVMVF9CQVNFICsgMHgzYykKK3N0cnVjdCBpMmMgeworCXVuc2lnbmVkIHNob3J0IHJldjsJLyogMHgwMCAqLworCXVuc2lnbmVkIHNob3J0IHJlczE7CisJdW5zaWduZWQgc2hvcnQgaWU7CS8qIDB4MDQgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMyOworCXVuc2lnbmVkIHNob3J0IHN0YXQ7CS8qIDB4MDggKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMzOworCXVuc2lnbmVkIHNob3J0IGl2OwkvKiAweDBDICovCisJdW5zaWduZWQgc2hvcnQgcmVzNFszXTsKKwl1bnNpZ25lZCBzaG9ydCBidWY7CS8qIDB4MTQgKi8KKwl1bnNpZ25lZCBzaG9ydCByZXM1OworCXVuc2lnbmVkIHNob3J0IGNudDsJLyogMHgxOCAqLworCXVuc2lnbmVkIHNob3J0IHJlczY7CisJdW5zaWduZWQgc2hvcnQgZGF0YTsJLyogMHgxQyAqLworCXVuc2lnbmVkIHNob3J0IHJlczc7CisJdW5zaWduZWQgc2hvcnQgc3lzYzsJLyogMHgyMCAqLworCXVuc2lnbmVkIHNob3J0IHJlczg7CisJdW5zaWduZWQgc2hvcnQgY29uOwkvKiAweDI0ICovCisJdW5zaWduZWQgc2hvcnQgcmVzOTsKKwl1bnNpZ25lZCBzaG9ydCBvYTsJLyogMHgyOCAqLworCXVuc2lnbmVkIHNob3J0IHJlczEwOworCXVuc2lnbmVkIHNob3J0IHNhOwkvKiAweDJDICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTE7CisJdW5zaWduZWQgc2hvcnQgcHNjOwkvKiAweDMwICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTI7CisJdW5zaWduZWQgc2hvcnQgc2NsbDsJLyogMHgzNCAqLworCXVuc2lnbmVkIHNob3J0IHJlczEzOworCXVuc2lnbmVkIHNob3J0IHNjbGg7CS8qIDB4MzggKi8KKwl1bnNpZ25lZCBzaG9ydCByZXMxNDsKKwl1bnNpZ25lZCBzaG9ydCBzeXN0ZXN0OwkvKiAweDNjICovCisJdW5zaWduZWQgc2hvcnQgcmVzMTU7Cit9OworCisjZGVmaW5lIEkyQ19CVVNfTUFYCTMKIAogLyogSTJDIG1hc2tzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAzL21lbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvbWVtLmgKaW5kZXggNWI5YWM3NS4uOTQzOTc1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvbWVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcDMvbWVtLmgKQEAgLTQwLDExICs0MCw4IEBACiAjZGVmaW5lIEVBUkxZX0lOSVQJMQogCiAvKiBTbG93ZXIgZnVsbCBmcmVxdWVuY3kgcmFuZ2UgZGVmYXVsdCB0aW1pbmdzIGZvciB4MzIgb3BlcmF0aW9uKi8KLSNkZWZpbmUgU0RQX1NEUkNfU0hBUklORwkweDAwMDAwMTAwCi0jZGVmaW5lIFNEUF9TRFJDX01SXzBfU0RSCTB4MDAwMDAwMzEKLQotLyogb3B0aW1pemVkIHRpbWluZ3MgZ29vZCBmb3IgY3VycmVudCBzaGlwcGluZyBwYXJ0cyAqLwotI2RlZmluZSBTRFBfMzQzMF9TRFJDX1JGUl9DVFJMXzE2NU1IegkweDAwMDRlMjAxIC8qIDcuOHVzLzZucyAtIDUwPTB4NGUyICovCisjZGVmaW5lIFNEUkNfU0hBUklORwkweDAwMDAwMTAwCisjZGVmaW5lIFNEUkNfTVJfMF9TRFIJMHgwMDAwMDAzMQogCiAjZGVmaW5lIERMTF9PRkZTRVQJCTAKICNkZWZpbmUgRExMX1dSSVRFRERSQ0xLWDJESVMJMQpAQCAtNzEsMjkgKzY4LDc4IEBACiAgKglUQ0tFID0gMgogICoJWFNSID0gMTIwLzYgPSAyMAogICovCi0jZGVmaW5lIFREQUxfMTY1CTYKLSNkZWZpbmUgVERQTF8xNjUJMwotI2RlZmluZSBUUlJEXzE2NQkyCi0jZGVmaW5lIFRSQ0RfMTY1CTMKLSNkZWZpbmUgVFJQXzE2NQkJMwotI2RlZmluZSBUUkFTXzE2NQk3Ci0jZGVmaW5lIFRSQ18xNjUJCTEwCi0jZGVmaW5lIFRSRkNfMTY1CTIxCi0jZGVmaW5lIFZfQUNUSU1BXzE2NQkoKFRSRkNfMTY1IDw8IDI3KSB8IChUUkNfMTY1IDw8IDIyKSB8IFwKLQkJCShUUkFTXzE2NSA8PCAxOCkgfCAoVFJQXzE2NSA8PCAxNSkgfCAgXAotCQkJKFRSQ0RfMTY1IDw8IDEyKSB8IChUUlJEXzE2NSA8PCA5KSB8ICBcCi0JCQkoVERQTF8xNjUgPDwgNikgfCAoVERBTF8xNjUpKQorI2RlZmluZSBJTkZJTkVPTl9UREFMXzE2NQk2CisjZGVmaW5lIElORklORU9OX1REUExfMTY1CTMKKyNkZWZpbmUgSU5GSU5FT05fVFJSRF8xNjUJMgorI2RlZmluZSBJTkZJTkVPTl9UUkNEXzE2NQkzCisjZGVmaW5lIElORklORU9OX1RSUF8xNjUJMworI2RlZmluZSBJTkZJTkVPTl9UUkFTXzE2NQk3CisjZGVmaW5lIElORklORU9OX1RSQ18xNjUJMTAKKyNkZWZpbmUgSU5GSU5FT05fVFJGQ18xNjUJMTIKKyNkZWZpbmUgSU5GSU5FT05fVl9BQ1RJTUFfMTY1CSgoSU5GSU5FT05fVFJGQ18xNjUgPDwgMjcpIHwJCVwKKwkJKElORklORU9OX1RSQ18xNjUgPDwgMjIpIHwgKElORklORU9OX1RSQVNfMTY1IDw8IDE4KSB8CVwKKwkJKElORklORU9OX1RSUF8xNjUgPDwgMTUpIHwgKElORklORU9OX1RSQ0RfMTY1IDw8IDEyKSB8CVwKKwkJKElORklORU9OX1RSUkRfMTY1IDw8IDkpIHwgKElORklORU9OX1REUExfMTY1IDw8IDYpIHwJXAorCQkoSU5GSU5FT05fVERBTF8xNjUpKQorCisjZGVmaW5lIElORklORU9OX1RXVFJfMTY1CTEKKyNkZWZpbmUgSU5GSU5FT05fVENLRV8xNjUJMgorI2RlZmluZSBJTkZJTkVPTl9UWFBfMTY1CTIKKyNkZWZpbmUgSU5GSU5FT05fWFNSXzE2NQkyMAorI2RlZmluZSBJTkZJTkVPTl9WX0FDVElNQl8xNjUJKChJTkZJTkVPTl9UQ0tFXzE2NSA8PCAxMikgfAkJXAorCQkoSU5GSU5FT05fWFNSXzE2NSA8PCAwKSB8IChJTkZJTkVPTl9UWFBfMTY1IDw8IDgpIHwJXAorCQkoSU5GSU5FT05fVFdUUl8xNjUgPDwgMTYpKQorCisvKiBNaWNyb24gcGFydCBvZiAzNDMwIEVWTSAoMTY1TUh6IG9wdGltaXplZCkgNi4wNm5zCisgKiBBQ1RJTUEKKyAqCVREQUwgPSBUd3IvVGNrICsgVHJwL3Rjaz0gMTUvNiArIDE4IC82ID0gMi41ICsgMyA9IDUuNSAtPiA2CisgKglURFBMIChUd3IpCT0gMTUvNgk9IDIuNSAtPiAzCisgKglUUlJECQk9IDEyLzYJPSAyCisgKglUUkNECQk9IDE4LzYJPSAzCisgKglUUlAJCT0gMTgvNgk9IDMKKyAqCVRSQVMJCT0gNDIvNgk9IDcKKyAqCVRSQwkJPSA2MC82CT0gMTAKKyAqCVRSRkMJCT0gMTI1LzYJPSAyMQorICogQUNUSU1CCisgKglUV1RSCQk9IDEKKyAqCVRDS0UJCT0gMQorICoJVFhTUgkJPSAxMzgvNgk9IDIzCisgKglUWFAJCT0gMjUvNgk9IDQuMSB+NQorICovCisjZGVmaW5lIE1JQ1JPTl9UREFMXzE2NQkJNgorI2RlZmluZSBNSUNST05fVERQTF8xNjUJCTMKKyNkZWZpbmUgTUlDUk9OX1RSUkRfMTY1CQkyCisjZGVmaW5lIE1JQ1JPTl9UUkNEXzE2NQkJMworI2RlZmluZSBNSUNST05fVFJQXzE2NQkJMworI2RlZmluZSBNSUNST05fVFJBU18xNjUJCTcKKyNkZWZpbmUgTUlDUk9OX1RSQ18xNjUJCTEwCisjZGVmaW5lIE1JQ1JPTl9UUkZDXzE2NQkJMjEKKyNkZWZpbmUgTUlDUk9OX1ZfQUNUSU1BXzE2NSAoKE1JQ1JPTl9UUkZDXzE2NSA8PCAyNykgfAkJCVwKKwkJKE1JQ1JPTl9UUkNfMTY1IDw8IDIyKSB8IChNSUNST05fVFJBU18xNjUgPDwgMTgpIHwJXAorCQkoTUlDUk9OX1RSUF8xNjUgPDwgMTUpIHwgKE1JQ1JPTl9UUkNEXzE2NSA8PCAxMikgfAlcCisJCShNSUNST05fVFJSRF8xNjUgPDwgOSkgfCAoTUlDUk9OX1REUExfMTY1IDw8IDYpIHwJXAorCQkoTUlDUk9OX1REQUxfMTY1KSkKKworI2RlZmluZSBNSUNST05fVFdUUl8xNjUJCTEKKyNkZWZpbmUgTUlDUk9OX1RDS0VfMTY1CQkxCisjZGVmaW5lIE1JQ1JPTl9YU1JfMTY1CQkyMworI2RlZmluZSBNSUNST05fVFhQXzE2NQkJNQorI2RlZmluZSBNSUNST05fVl9BQ1RJTUJfMTY1ICgoTUlDUk9OX1RDS0VfMTY1IDw8IDEyKSB8CQkJXAorCQkoTUlDUk9OX1hTUl8xNjUgPDwgMCkgfCAoTUlDUk9OX1RYUF8xNjUgPDwgOCkgfAlcCisJCShNSUNST05fVFdUUl8xNjUgPDwgMTYpKQogCi0jZGVmaW5lIFRXVFJfMTY1CTEKLSNkZWZpbmUgVENLRV8xNjUJMQotI2RlZmluZSBUWFBfMTY1CQk1Ci0jZGVmaW5lIFhTUl8xNjUJCTIzCi0jZGVmaW5lIFZfQUNUSU1CXzE2NQkoKChUQ0tFXzE2NSA8PCAxMikgfCAoWFNSXzE2NSA8PCAwKSkgfAlcCi0JCQkoVFhQXzE2NSA8PCA4KSB8IChUV1RSXzE2NSA8PCAxNikpCisjaWZkZWYgQ09ORklHX09NQVAzX0lORklORU9OX0REUgorI2RlZmluZSBWX0FDVElNQV8xNjUgSU5GSU5FT05fVl9BQ1RJTUFfMTY1CisjZGVmaW5lIFZfQUNUSU1CXzE2NSBJTkZJTkVPTl9WX0FDVElNQl8xNjUKKyNlbmRpZgorI2lmZGVmIENPTkZJR19PTUFQM19NSUNST05fRERSCisjZGVmaW5lIFZfQUNUSU1BXzE2NSBNSUNST05fVl9BQ1RJTUFfMTY1CisjZGVmaW5lIFZfQUNUSU1CXzE2NSBNSUNST05fVl9BQ1RJTUJfMTY1CisjZW5kaWYKIAotI2RlZmluZSBTRFBfU0RSQ19BQ1RJTV9DVFJMQV8wCVZfQUNUSU1BXzE2NQotI2RlZmluZSBTRFBfU0RSQ19BQ1RJTV9DVFJMQl8wCVZfQUNUSU1CXzE2NQotI2RlZmluZSBTRFBfU0RSQ19SRlJfQ1RSTAlTRFBfMzQzMF9TRFJDX1JGUl9DVFJMXzE2NU1IegorI2lmICFkZWZpbmVkKFZfQUNUSU1BXzE2NSkgfHwgIWRlZmluZWQoVl9BQ1RJTUJfMTY1KQorI2Vycm9yICJQbGVhc2UgY2hvb3NlIHRoZSByaWdodCBERFIgdHlwZSBpbiBjb25maWcgaGVhZGVyIgorI2VuZGlmCiAKIC8qCiAgKiBHUE1DIHNldHRpbmdzIC0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvczNjMjQwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjR4MC9zM2MyNDAwLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9zM2MyNDAwLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0eDAvczNjMjQwMC5oCmluZGV4IDA2MjI1OWQuLjI2NzhiZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvczNjMjQwMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0eDAvczNjMjQwMC5oCkBAIC02MCw3NCArNjAsOTAgQEAKICNkZWZpbmUgUzNDMjQwMF9NTUNfQkFTRQkJMHgxNUEwMDAwMAogCiAvKiBpbmNsdWRlIGNvbW1vbiBzdHVmZiAqLwotI2luY2x1ZGUgPHMzYzI0eDAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zM2MyNHgwLmg+CiAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF9tZW1jdGwgKnMzYzI0eDBfZ2V0X2Jhc2VfbWVtY3RsKHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF9tZW1jdGwgKilTM0MyNFgwX01FTUNUTF9CQVNFOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHgwX3VzYl9ob3N0ICpzM2MyNHgwX2dldF9iYXNlX3VzYl9ob3N0KHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF91c2JfaG9zdCAqKVMzQzI0WDBfVVNCX0hPU1RfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF9pbnRlcnJ1cHQgKnMzYzI0eDBfZ2V0X2Jhc2VfaW50ZXJydXB0KHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF9pbnRlcnJ1cHQgKilTM0MyNFgwX0lOVEVSUlVQVF9CQVNFOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHgwX2RtYXMgKnMzYzI0eDBfZ2V0X2Jhc2VfZG1hcyh2b2lkKQogewogCXJldHVybiAoc3RydWN0IHMzYzI0eDBfZG1hcyAqKVMzQzI0WDBfRE1BX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfY2xvY2tfcG93ZXIgKnMzYzI0eDBfZ2V0X2Jhc2VfY2xvY2tfcG93ZXIodm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX2Nsb2NrX3Bvd2VyICopUzNDMjRYMF9DTE9DS19QT1dFUl9CQVNFOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHgwX2xjZCAqczNjMjR4MF9nZXRfYmFzZV9sY2Qodm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX2xjZCAqKVMzQzI0WDBfTENEX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfdWFydAogCSpzM2MyNHgwX2dldF9iYXNlX3VhcnQoZW51bSBzM2MyNHgwX3VhcnRzX25yIG4pCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF91YXJ0ICopKFMzQzI0WDBfVUFSVF9CQVNFICsgKG4gKiAweDQwMDApKTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF90aW1lcnMgKnMzYzI0eDBfZ2V0X2Jhc2VfdGltZXJzKHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF90aW1lcnMgKilTM0MyNFgwX1RJTUVSX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfdXNiX2RldmljZSAqczNjMjR4MF9nZXRfYmFzZV91c2JfZGV2aWNlKHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF91c2JfZGV2aWNlICopUzNDMjRYMF9VU0JfREVWSUNFX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfd2F0Y2hkb2cgKnMzYzI0eDBfZ2V0X2Jhc2Vfd2F0Y2hkb2codm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX3dhdGNoZG9nICopUzNDMjRYMF9XQVRDSERPR19CQVNFOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHgwX2kyYyAqczNjMjR4MF9nZXRfYmFzZV9pMmModm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX2kyYyAqKVMzQzI0WDBfSTJDX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfaTJzICpzM2MyNHgwX2dldF9iYXNlX2kycyh2b2lkKQogewogCXJldHVybiAoc3RydWN0IHMzYzI0eDBfaTJzICopUzNDMjRYMF9JMlNfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF9ncGlvICpzM2MyNHgwX2dldF9iYXNlX2dwaW8odm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX2dwaW8gKilTM0MyNFgwX0dQSU9fQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF9ydGMgKnMzYzI0eDBfZ2V0X2Jhc2VfcnRjKHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF9ydGMgKilTM0MyNFgwX1JUQ19CQVNFOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNDAwX2FkYyAqczNjMjQwMF9nZXRfYmFzZV9hZGModm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNDAwX2FkYyAqKVMzQzI0WDBfQURDX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfc3BpICpzM2MyNHgwX2dldF9iYXNlX3NwaSh2b2lkKQogewogCXJldHVybiAoc3RydWN0IHMzYzI0eDBfc3BpICopUzNDMjRYMF9TUElfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjQwMF9tbWMgKnMzYzI0MDBfZ2V0X2Jhc2VfbW1jKHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjQwMF9tbWMgKilTM0MyNDAwX01NQ19CQVNFOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zM2MyNDEwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNHgwL3MzYzI0MTAuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL3MzYzI0MTAuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjR4MC9zM2MyNDEwLmgKaW5kZXggMDNiMzNiNC4uMDU0M2ZlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zM2MyNDEwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjR4MC9zM2MyNDEwLmgKQEAgLTY2LDc4ICs2Niw5NSBAQAogCiAKIC8qIGluY2x1ZGUgY29tbW9uIHN0dWZmICovCi0jaW5jbHVkZSA8czNjMjR4MC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3MzYzI0eDAuaD4KIAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHgwX21lbWN0bCAqczNjMjR4MF9nZXRfYmFzZV9tZW1jdGwodm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX21lbWN0bCAqKVMzQzI0WDBfTUVNQ1RMX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfdXNiX2hvc3QgKnMzYzI0eDBfZ2V0X2Jhc2VfdXNiX2hvc3Qodm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX3VzYl9ob3N0ICopUzNDMjRYMF9VU0JfSE9TVF9CQVNFOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHgwX2ludGVycnVwdCAqczNjMjR4MF9nZXRfYmFzZV9pbnRlcnJ1cHQodm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX2ludGVycnVwdCAqKVMzQzI0WDBfSU5URVJSVVBUX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfZG1hcyAqczNjMjR4MF9nZXRfYmFzZV9kbWFzKHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF9kbWFzICopUzNDMjRYMF9ETUFfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF9jbG9ja19wb3dlciAqczNjMjR4MF9nZXRfYmFzZV9jbG9ja19wb3dlcih2b2lkKQogewogCXJldHVybiAoc3RydWN0IHMzYzI0eDBfY2xvY2tfcG93ZXIgKilTM0MyNFgwX0NMT0NLX1BPV0VSX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfbGNkICpzM2MyNHgwX2dldF9iYXNlX2xjZCh2b2lkKQogewogCXJldHVybiAoc3RydWN0IHMzYzI0eDBfbGNkICopUzNDMjRYMF9MQ0RfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjQxMF9uYW5kICpzM2MyNDEwX2dldF9iYXNlX25hbmQodm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNDEwX25hbmQgKilTM0MyNDEwX05BTkRfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF91YXJ0CiAJKnMzYzI0eDBfZ2V0X2Jhc2VfdWFydChlbnVtIHMzYzI0eDBfdWFydHNfbnIgbikKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX3VhcnQgKikoUzNDMjRYMF9VQVJUX0JBU0UgKyAobiAqIDB4NDAwMCkpOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHgwX3RpbWVycyAqczNjMjR4MF9nZXRfYmFzZV90aW1lcnModm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX3RpbWVycyAqKVMzQzI0WDBfVElNRVJfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF91c2JfZGV2aWNlICpzM2MyNHgwX2dldF9iYXNlX3VzYl9kZXZpY2Uodm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX3VzYl9kZXZpY2UgKilTM0MyNFgwX1VTQl9ERVZJQ0VfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF93YXRjaGRvZyAqczNjMjR4MF9nZXRfYmFzZV93YXRjaGRvZyh2b2lkKQogewogCXJldHVybiAoc3RydWN0IHMzYzI0eDBfd2F0Y2hkb2cgKilTM0MyNFgwX1dBVENIRE9HX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0eDBfaTJjICpzM2MyNHgwX2dldF9iYXNlX2kyYyh2b2lkKQogewogCXJldHVybiAoc3RydWN0IHMzYzI0eDBfaTJjICopUzNDMjRYMF9JMkNfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF9pMnMgKnMzYzI0eDBfZ2V0X2Jhc2VfaTJzKHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF9pMnMgKilTM0MyNFgwX0kyU19CQVNFOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHgwX2dwaW8gKnMzYzI0eDBfZ2V0X2Jhc2VfZ3Bpbyh2b2lkKQogewogCXJldHVybiAoc3RydWN0IHMzYzI0eDBfZ3BpbyAqKVMzQzI0WDBfR1BJT19CQVNFOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNHgwX3J0YyAqczNjMjR4MF9nZXRfYmFzZV9ydGModm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNHgwX3J0YyAqKVMzQzI0WDBfUlRDX0JBU0U7CiB9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHMzYzI0MTBfYWRjICpzM2MyNDEwX2dldF9iYXNlX2FkYyh2b2lkKQogewogCXJldHVybiAoc3RydWN0IHMzYzI0MTBfYWRjICopUzNDMjQxMF9BRENfQkFTRTsKIH0KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjR4MF9zcGkgKnMzYzI0eDBfZ2V0X2Jhc2Vfc3BpKHZvaWQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgczNjMjR4MF9zcGkgKilTM0MyNFgwX1NQSV9CQVNFOwogfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2MyNDEwX3NkaSAqczNjMjQxMF9nZXRfYmFzZV9zZGkodm9pZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzM2MyNDEwX3NkaSAqKVMzQzI0MTBfU0RJX0JBU0U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNHgwL3MzYzI0eDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0eDAvczNjMjR4MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjUzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNHgwL3MzYzI0eDAuaApAQCAtMCwwICsxLDY1MiBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogRGF2aWQgTfxsbGVyIEVMU09GVCBBRyBTd2l0emVybGFuZC4gZC5tdWVsbGVyQGVsc29mdC5jaAorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5BTUUJICAgIDogczNjMjR4MC5oCisgKiBWZXJzaW9uICA6IDMxLjMuMjAwMworICoKKyAqIGNvbW1vbiBzdHVmZiBmb3IgU0FNU1VORyBTM0MyNFgwIFNvQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX1MzQzI0WDBfSF9fCisjZGVmaW5lIF9fUzNDMjRYMF9IX18KKworLyogTWVtb3J5IGNvbnRyb2xsZXIgKHNlZSBtYW51YWwgY2hhcHRlciA1KSAqLworc3RydWN0IHMzYzI0eDBfbWVtY3RsIHsKKwl1MzIJQldTQ09OOworCXUzMglCQU5LQ09OWzhdOworCXUzMglSRUZSRVNIOworCXUzMglCQU5LU0laRTsKKwl1MzIJTVJTUkI2OworCXUzMglNUlNSQjc7Cit9OworCisKKy8qIFVTQiBIT1NUIChzZWUgbWFudWFsIGNoYXB0ZXIgMTIpICovCitzdHJ1Y3QgczNjMjR4MF91c2JfaG9zdCB7CisJdTMyCUhjUmV2aXNpb247CisJdTMyCUhjQ29udHJvbDsKKwl1MzIJSGNDb21tb25TdGF0dXM7CisJdTMyCUhjSW50ZXJydXB0U3RhdHVzOworCXUzMglIY0ludGVycnVwdEVuYWJsZTsKKwl1MzIJSGNJbnRlcnJ1cHREaXNhYmxlOworCXUzMglIY0hDQ0E7CisJdTMyCUhjUGVyaW9kQ3V0dGVuZEVEOworCXUzMglIY0NvbnRyb2xIZWFkRUQ7CisJdTMyCUhjQ29udHJvbEN1cnJlbnRFRDsKKwl1MzIJSGNCdWxrSGVhZEVEOworCXUzMglIY0J1bGRDdXJyZW50RUQ7CisJdTMyCUhjRG9uZUhlYWQ7CisJdTMyCUhjUm1JbnRlcnZhbDsKKwl1MzIJSGNGbVJlbWFpbmluZzsKKwl1MzIJSGNGbU51bWJlcjsKKwl1MzIJSGNQZXJpb2RpY1N0YXJ0OworCXUzMglIY0xTVGhyZXNob2xkOworCXUzMglIY1JoRGVzY3JpcHRvckE7CisJdTMyCUhjUmhEZXNjcmlwdG9yQjsKKwl1MzIJSGNSaFN0YXR1czsKKwl1MzIJSGNSaFBvcnRTdGF0dXMxOworCXUzMglIY1JoUG9ydFN0YXR1czI7Cit9OworCisKKy8qIElOVEVSUlVQVCAoc2VlIG1hbnVhbCBjaGFwdGVyIDE0KSAqLworc3RydWN0IHMzYzI0eDBfaW50ZXJydXB0IHsKKwl1MzIJU1JDUE5EOworCXUzMglJTlRNT0Q7CisJdTMyCUlOVE1TSzsKKwl1MzIJUFJJT1JJVFk7CisJdTMyCUlOVFBORDsKKwl1MzIJSU5UT0ZGU0VUOworI2lmZGVmIENPTkZJR19TM0MyNDEwCisJdTMyCVNVQlNSQ1BORDsKKwl1MzIJSU5UU1VCTVNLOworI2VuZGlmCit9OworCisKKy8qIERNQVMgKHNlZSBtYW51YWwgY2hhcHRlciA4KSAqLworc3RydWN0IHMzYzI0eDBfZG1hIHsKKwl1MzIJRElTUkM7CisjaWZkZWYgQ09ORklHX1MzQzI0MTAKKwl1MzIJRElTUkNDOworI2VuZGlmCisJdTMyCURJRFNUOworI2lmZGVmIENPTkZJR19TM0MyNDEwCisJdTMyCURJRFNUQzsKKyNlbmRpZgorCXUzMglEQ09OOworCXUzMglEU1RBVDsKKwl1MzIJRENTUkM7CisJdTMyCURDRFNUOworCXUzMglETUFTS1RSSUc7CisjaWZkZWYgQ09ORklHX1MzQzI0MDAKKwl1MzIJcmVzWzFdOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1MzQzI0MTAKKwl1MzIJcmVzWzddOworI2VuZGlmCit9OworCitzdHJ1Y3QgczNjMjR4MF9kbWFzIHsKKwlzdHJ1Y3QgczNjMjR4MF9kbWEJZG1hWzRdOworfTsKKworCisvKiBDTE9DSyAmIFBPV0VSIE1BTkFHRU1FTlQgKHNlZSBTM0MyNDAwIG1hbnVhbCBjaGFwdGVyIDYpICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBTM0MyNDEwIG1hbnVhbCBjaGFwdGVyIDcpICovCitzdHJ1Y3QgczNjMjR4MF9jbG9ja19wb3dlciB7CisJdTMyCUxPQ0tUSU1FOworCXUzMglNUExMQ09OOworCXUzMglVUExMQ09OOworCXUzMglDTEtDT047CisJdTMyCUNMS1NMT1c7CisJdTMyCUNMS0RJVk47Cit9OworCisKKy8qIExDRCBDT05UUk9MTEVSIChzZWUgbWFudWFsIGNoYXB0ZXIgMTUpICovCitzdHJ1Y3QgczNjMjR4MF9sY2QgeworCXUzMglMQ0RDT04xOworCXUzMglMQ0RDT04yOworCXUzMglMQ0RDT04zOworCXUzMglMQ0RDT040OworCXUzMglMQ0RDT041OworCXUzMglMQ0RTQUREUjE7CisJdTMyCUxDRFNBRERSMjsKKwl1MzIJTENEU0FERFIzOworCXUzMglSRURMVVQ7CisJdTMyCUdSRUVOTFVUOworCXUzMglCTFVFTFVUOworCXUzMglyZXNbOF07CisJdTMyCURJVEhNT0RFOworCXUzMglUUEFMOworI2lmZGVmIENPTkZJR19TM0MyNDEwCisJdTMyCUxDRElOVFBORDsKKwl1MzIJTENEU1JDUE5EOworCXUzMglMQ0RJTlRNU0s7CisJdTMyCUxQQ1NFTDsKKyNlbmRpZgorfTsKKworCisvKiBOQU5EIEZMQVNIIChzZWUgUzNDMjQxMCBtYW51YWwgY2hhcHRlciA2KSAqLworc3RydWN0IHMzYzI0MTBfbmFuZCB7CisJdTMyCU5GQ09ORjsKKwl1MzIJTkZDTUQ7CisJdTMyCU5GQUREUjsKKwl1MzIJTkZEQVRBOworCXUzMglORlNUQVQ7CisJdTMyCU5GRUNDOworfTsKKworCisvKiBVQVJUIChzZWUgbWFudWFsIGNoYXB0ZXIgMTEpICovCitzdHJ1Y3QgczNjMjR4MF91YXJ0IHsKKwl1MzIJVUxDT047CisJdTMyCVVDT047CisJdTMyCVVGQ09OOworCXUzMglVTUNPTjsKKwl1MzIJVVRSU1RBVDsKKwl1MzIJVUVSU1RBVDsKKwl1MzIJVUZTVEFUOworCXUzMglVTVNUQVQ7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdTgJcmVzMVszXTsKKwl1OAlVVFhIOworCXU4CXJlczJbM107CisJdTgJVVJYSDsKKyNlbHNlIC8qIExpdHRsZSBFbmRpYW4gKi8KKwl1OAlVVFhIOworCXU4CXJlczFbM107CisJdTgJVVJYSDsKKwl1OAlyZXMyWzNdOworI2VuZGlmCisJdTMyCVVCUkRJVjsKK307CisKKworLyogUFdNIFRJTUVSIChzZWUgbWFudWFsIGNoYXB0ZXIgMTApICovCitzdHJ1Y3QgczNjMjR4MF90aW1lciB7CisJdTMyCVRDTlRCOworCXUzMglUQ01QQjsKKwl1MzIJVENOVE87Cit9OworCitzdHJ1Y3QgczNjMjR4MF90aW1lcnMgeworCXUzMglUQ0ZHMDsKKwl1MzIJVENGRzE7CisJdTMyCVRDT047CisJc3RydWN0IHMzYzI0eDBfdGltZXIJY2hbNF07CisJdTMyCVRDTlRCNDsKKwl1MzIJVENOVE80OworfTsKKworCisvKiBVU0IgREVWSUNFIChzZWUgbWFudWFsIGNoYXB0ZXIgMTMpICovCitzdHJ1Y3QgczNjMjR4MF91c2JfZGV2X2ZpZm9zIHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1OAlyZXNbM107CisJdTgJRVBfRklGT19SRUc7CisjZWxzZSAvKiAgbGl0dGxlIGVuZGlhbiAqLworCXU4CUVQX0ZJRk9fUkVHOworCXU4CXJlc1szXTsKKyNlbmRpZgorfTsKKworc3RydWN0IHMzYzI0eDBfdXNiX2Rldl9kbWFzIHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1OAlyZXMxWzNdOworCXU4CUVQX0RNQV9DT047CisJdTgJcmVzMlszXTsKKwl1OAlFUF9ETUFfVU5JVDsKKwl1OAlyZXMzWzNdOworCXU4CUVQX0RNQV9GSUZPOworCXU4CXJlczRbM107CisJdTgJRVBfRE1BX1RUQ19MOworCXU4CXJlczVbM107CisJdTgJRVBfRE1BX1RUQ19NOworCXU4CXJlczZbM107CisJdTgJRVBfRE1BX1RUQ19IOworI2Vsc2UgLyogIGxpdHRsZSBlbmRpYW4gKi8KKwl1OAlFUF9ETUFfQ09OOworCXU4CXJlczFbM107CisJdTgJRVBfRE1BX1VOSVQ7CisJdTgJcmVzMlszXTsKKwl1OAlFUF9ETUFfRklGTzsKKwl1OAlyZXMzWzNdOworCXU4CUVQX0RNQV9UVENfTDsKKwl1OAlyZXM0WzNdOworCXU4CUVQX0RNQV9UVENfTTsKKwl1OAlyZXM1WzNdOworCXU4CUVQX0RNQV9UVENfSDsKKwl1OAlyZXM2WzNdOworI2VuZGlmCit9OworCitzdHJ1Y3QgczNjMjR4MF91c2JfZGV2aWNlIHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1OAlyZXMxWzNdOworCXU4CUZVTkNfQUREUl9SRUc7CisJdTgJcmVzMlszXTsKKwl1OAlQV1JfUkVHOworCXU4CXJlczNbM107CisJdTgJRVBfSU5UX1JFRzsKKwl1OAlyZXM0WzE1XTsKKwl1OAlVU0JfSU5UX1JFRzsKKwl1OAlyZXM1WzNdOworCXU4CUVQX0lOVF9FTl9SRUc7CisJdTgJcmVzNlsxNV07CisJdTgJVVNCX0lOVF9FTl9SRUc7CisJdTgJcmVzN1szXTsKKwl1OAlGUkFNRV9OVU0xX1JFRzsKKwl1OAlyZXM4WzNdOworCXU4CUZSQU1FX05VTTJfUkVHOworCXU4CXJlczlbM107CisJdTgJSU5ERVhfUkVHOworCXU4CXJlczEwWzddOworCXU4CU1BWFBfUkVHOworCXU4CXJlczExWzNdOworCXU4CUVQMF9DU1JfSU5fQ1NSMV9SRUc7CisJdTgJcmVzMTJbM107CisJdTgJSU5fQ1NSMl9SRUc7CisJdTgJcmVzMTNbN107CisJdTgJT1VUX0NTUjFfUkVHOworCXU4CXJlczE0WzNdOworCXU4CU9VVF9DU1IyX1JFRzsKKwl1OAlyZXMxNVszXTsKKwl1OAlPVVRfRklGT19DTlQxX1JFRzsKKwl1OAlyZXMxNlszXTsKKwl1OAlPVVRfRklGT19DTlQyX1JFRzsKKyNlbHNlIC8qICBsaXR0bGUgZW5kaWFuICovCisJdTgJRlVOQ19BRERSX1JFRzsKKwl1OAlyZXMxWzNdOworCXU4CVBXUl9SRUc7CisJdTgJcmVzMlszXTsKKwl1OAlFUF9JTlRfUkVHOworCXU4CXJlczNbMTVdOworCXU4CVVTQl9JTlRfUkVHOworCXU4CXJlczRbM107CisJdTgJRVBfSU5UX0VOX1JFRzsKKwl1OAlyZXM1WzE1XTsKKwl1OAlVU0JfSU5UX0VOX1JFRzsKKwl1OAlyZXM2WzNdOworCXU4CUZSQU1FX05VTTFfUkVHOworCXU4CXJlczdbM107CisJdTgJRlJBTUVfTlVNMl9SRUc7CisJdTgJcmVzOFszXTsKKwl1OAlJTkRFWF9SRUc7CisJdTgJcmVzOVs3XTsKKwl1OAlNQVhQX1JFRzsKKwl1OAlyZXMxMFs3XTsKKwl1OAlFUDBfQ1NSX0lOX0NTUjFfUkVHOworCXU4CXJlczExWzNdOworCXU4CUlOX0NTUjJfUkVHOworCXU4CXJlczEyWzNdOworCXU4CU9VVF9DU1IxX1JFRzsKKwl1OAlyZXMxM1s3XTsKKwl1OAlPVVRfQ1NSMl9SRUc7CisJdTgJcmVzMTRbM107CisJdTgJT1VUX0ZJRk9fQ05UMV9SRUc7CisJdTgJcmVzMTVbM107CisJdTgJT1VUX0ZJRk9fQ05UMl9SRUc7CisJdTgJcmVzMTZbM107CisjZW5kaWYgLyogIF9fQklHX0VORElBTiAqLworCXN0cnVjdCBzM2MyNHgwX3VzYl9kZXZfZmlmb3MJZmlmb1s1XTsKKwlzdHJ1Y3QgczNjMjR4MF91c2JfZGV2X2RtYXMJZG1hWzVdOworfTsKKworCisvKiBXQVRDSCBET0cgVElNRVIgKHNlZSBtYW51YWwgY2hhcHRlciAxOCkgKi8KK3N0cnVjdCBzM2MyNHgwX3dhdGNoZG9nIHsKKwl1MzIJV1RDT047CisJdTMyCVdUREFUOworCXUzMglXVENOVDsKK307CisKKworLyogSUlDIChzZWUgbWFudWFsIGNoYXB0ZXIgMjApICovCitzdHJ1Y3QgczNjMjR4MF9pMmMgeworCXUzMglJSUNDT047CisJdTMyCUlJQ1NUQVQ7CisJdTMyCUlJQ0FERDsKKwl1MzIJSUlDRFM7Cit9OworCisKKy8qIElJUyAoc2VlIG1hbnVhbCBjaGFwdGVyIDIxKSAqLworc3RydWN0IHMzYzI0eDBfaTJzIHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1MTYJcmVzMTsKKwl1MTYJSUlTQ09OOworCXUxNglyZXMyOworCXUxNglJSVNNT0Q7CisJdTE2CXJlczM7CisJdTE2CUlJU1BTUjsKKwl1MTYJcmVzNDsKKwl1MTYJSUlTRkNPTjsKKwl1MTYJcmVzNTsKKwl1MTYJSUlTRklGTzsKKyNlbHNlIC8qICBsaXR0bGUgZW5kaWFuICovCisJdTE2CUlJU0NPTjsKKwl1MTYJcmVzMTsKKwl1MTYJSUlTTU9EOworCXUxNglyZXMyOworCXUxNglJSVNQU1I7CisJdTE2CXJlczM7CisJdTE2CUlJU0ZDT047CisJdTE2CXJlczQ7CisJdTE2CUlJU0ZJRk87CisJdTE2CXJlczU7CisjZW5kaWYKK307CisKKworLyogSS9PIFBPUlQgKHNlZSBtYW51YWwgY2hhcHRlciA5KSAqLworc3RydWN0IHMzYzI0eDBfZ3BpbyB7CisjaWZkZWYgQ09ORklHX1MzQzI0MDAKKwl1MzIJUEFDT047CisJdTMyCVBBREFUOworCisJdTMyCVBCQ09OOworCXUzMglQQkRBVDsKKwl1MzIJUEJVUDsKKworCXUzMglQQ0NPTjsKKwl1MzIJUENEQVQ7CisJdTMyCVBDVVA7CisKKwl1MzIJUERDT047CisJdTMyCVBEREFUOworCXUzMglQRFVQOworCisJdTMyCVBFQ09OOworCXUzMglQRURBVDsKKwl1MzIJUEVVUDsKKworCXUzMglQRkNPTjsKKwl1MzIJUEZEQVQ7CisJdTMyCVBGVVA7CisKKwl1MzIJUEdDT047CisJdTMyCVBHREFUOworCXUzMglQR1VQOworCisJdTMyCU9QRU5DUjsKKworCXUzMglNSVNDQ1I7CisJdTMyCUVYVElOVDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TM0MyNDEwCisJdTMyCUdQQUNPTjsKKwl1MzIJR1BBREFUOworCXUzMglyZXMxWzJdOworCXUzMglHUEJDT047CisJdTMyCUdQQkRBVDsKKwl1MzIJR1BCVVA7CisJdTMyCXJlczI7CisJdTMyCUdQQ0NPTjsKKwl1MzIJR1BDREFUOworCXUzMglHUENVUDsKKwl1MzIJcmVzMzsKKwl1MzIJR1BEQ09OOworCXUzMglHUEREQVQ7CisJdTMyCUdQRFVQOworCXUzMglyZXM0OworCXUzMglHUEVDT047CisJdTMyCUdQRURBVDsKKwl1MzIJR1BFVVA7CisJdTMyCXJlczU7CisJdTMyCUdQRkNPTjsKKwl1MzIJR1BGREFUOworCXUzMglHUEZVUDsKKwl1MzIJcmVzNjsKKwl1MzIJR1BHQ09OOworCXUzMglHUEdEQVQ7CisJdTMyCUdQR1VQOworCXUzMglyZXM3OworCXUzMglHUEhDT047CisJdTMyCUdQSERBVDsKKwl1MzIJR1BIVVA7CisJdTMyCXJlczg7CisKKwl1MzIJTUlTQ0NSOworCXUzMglEQ0xLQ09OOworCXUzMglFWFRJTlQwOworCXUzMglFWFRJTlQxOworCXUzMglFWFRJTlQyOworCXUzMglFSU5URkxUMDsKKwl1MzIJRUlOVEZMVDE7CisJdTMyCUVJTlRGTFQyOworCXUzMglFSU5URkxUMzsKKwl1MzIJRUlOVE1BU0s7CisJdTMyCUVJTlRQRU5EOworCXUzMglHU1RBVFVTMDsKKwl1MzIJR1NUQVRVUzE7CisJdTMyCUdTVEFUVVMyOworCXUzMglHU1RBVFVTMzsKKwl1MzIJR1NUQVRVUzQ7CisjZW5kaWYKK307CisKKworLyogUlRDIChzZWUgbWFudWFsIGNoYXB0ZXIgMTcpICovCitzdHJ1Y3QgczNjMjR4MF9ydGMgeworI2lmZGVmIF9fQklHX0VORElBTgorCXU4CXJlczFbNjddOworCXU4CVJUQ0NPTjsKKwl1OAlyZXMyWzNdOworCXU4CVRJQ05UOworCXU4CXJlczNbMTFdOworCXU4CVJUQ0FMTTsKKwl1OAlyZXM0WzNdOworCXU4CUFMTVNFQzsKKwl1OAlyZXM1WzNdOworCXU4CUFMTU1JTjsKKwl1OAlyZXM2WzNdOworCXU4CUFMTUhPVVI7CisJdTgJcmVzN1szXTsKKwl1OAlBTE1EQVRFOworCXU4CXJlczhbM107CisJdTgJQUxNTU9OOworCXU4CXJlczlbM107CisJdTgJQUxNWUVBUjsKKwl1OAlyZXMxMFszXTsKKwl1OAlSVENSU1Q7CisJdTgJcmVzMTFbM107CisJdTgJQkNEU0VDOworCXU4CXJlczEyWzNdOworCXU4CUJDRE1JTjsKKwl1OAlyZXMxM1szXTsKKwl1OAlCQ0RIT1VSOworCXU4CXJlczE0WzNdOworCXU4CUJDRERBVEU7CisJdTgJcmVzMTVbM107CisJdTgJQkNEREFZOworCXU4CXJlczE2WzNdOworCXU4CUJDRE1PTjsKKwl1OAlyZXMxN1szXTsKKwl1OAlCQ0RZRUFSOworI2Vsc2UgLyogIGxpdHRsZSBlbmRpYW4gKi8KKwl1OAlyZXMwWzY0XTsKKwl1OAlSVENDT047CisJdTgJcmVzMVszXTsKKwl1OAlUSUNOVDsKKwl1OAlyZXMyWzExXTsKKwl1OAlSVENBTE07CisJdTgJcmVzM1szXTsKKwl1OAlBTE1TRUM7CisJdTgJcmVzNFszXTsKKwl1OAlBTE1NSU47CisJdTgJcmVzNVszXTsKKwl1OAlBTE1IT1VSOworCXU4CXJlczZbM107CisJdTgJQUxNREFURTsKKwl1OAlyZXM3WzNdOworCXU4CUFMTU1PTjsKKwl1OAlyZXM4WzNdOworCXU4CUFMTVlFQVI7CisJdTgJcmVzOVszXTsKKwl1OAlSVENSU1Q7CisJdTgJcmVzMTBbM107CisJdTgJQkNEU0VDOworCXU4CXJlczExWzNdOworCXU4CUJDRE1JTjsKKwl1OAlyZXMxMlszXTsKKwl1OAlCQ0RIT1VSOworCXU4CXJlczEzWzNdOworCXU4CUJDRERBVEU7CisJdTgJcmVzMTRbM107CisJdTgJQkNEREFZOworCXU4CXJlczE1WzNdOworCXU4CUJDRE1PTjsKKwl1OAlyZXMxNlszXTsKKwl1OAlCQ0RZRUFSOworCXU4CXJlczE3WzNdOworI2VuZGlmCit9OworCisKKy8qIEFEQyAoc2VlIG1hbnVhbCBjaGFwdGVyIDE2KSAqLworc3RydWN0IHMzYzI0MDBfYWRjIHsKKwl1MzIJQURDQ09OOworCXUzMglBRENEQVQ7Cit9OworCisKKy8qIEFEQyAoc2VlIG1hbnVhbCBjaGFwdGVyIDE2KSAqLworc3RydWN0IHMzYzI0MTBfYWRjIHsKKwl1MzIJQURDQ09OOworCXUzMglBRENUU0M7CisJdTMyCUFEQ0RMWTsKKwl1MzIJQURDREFUMDsKKwl1MzIJQURDREFUMTsKK307CisKKworLyogU1BJIChzZWUgbWFudWFsIGNoYXB0ZXIgMjIpICovCitzdHJ1Y3QgczNjMjR4MF9zcGlfY2hhbm5lbCB7CisJdTgJU1BDT047CisJdTgJcmVzMVszXTsKKwl1OAlTUFNUQTsKKwl1OAlyZXMyWzNdOworCXU4CVNQUElOOworCXU4CXJlczNbM107CisJdTgJU1BQUkU7CisJdTgJcmVzNFszXTsKKwl1OAlTUFREQVQ7CisJdTgJcmVzNVszXTsKKwl1OAlTUFJEQVQ7CisJdTgJcmVzNlszXTsKKwl1OAlyZXM3WzE2XTsKK307CisKK3N0cnVjdCBzM2MyNHgwX3NwaSB7CisJc3RydWN0IHMzYzI0eDBfc3BpX2NoYW5uZWwJY2hbUzNDMjRYMF9TUElfQ0hBTk5FTFNdOworfTsKKworCisvKiBNTUMgSU5URVJGQUNFIChzZWUgUzNDMjQwMCBtYW51YWwgY2hhcHRlciAxOSkgKi8KK3N0cnVjdCBzM2MyNDAwX21tYyB7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdTgJcmVzMVszXTsKKwl1OAlNTUNPTjsKKwl1OAlyZXMyWzNdOworCXU4CU1NQ1JSOworCXU4CXJlczNbM107CisJdTgJTU1GQ09OOworCXU4CXJlczRbM107CisJdTgJTU1TVEE7CisJdTE2CXJlczU7CisJdTE2CU1NRlNUQTsKKwl1OAlyZXM2WzNdOworCXU4CU1NUFJFOworCXUxNglyZXM3OworCXUxNglNTUxFTjsKKwl1OAlyZXM4WzNdOworCXU4CU1NQ1I3OworCXUzMglNTVJTUFs0XTsKKwl1OAlyZXM5WzNdOworCXU4CU1NQ01EMDsKKwl1MzIJTU1DTUQxOworCXUxNglyZXMxMDsKKwl1MTYJTU1DUjE2OworCXU4CXJlczExWzNdOworCXU4CU1NREFUOworI2Vsc2UKKwl1OAlNTUNPTjsKKwl1OAlyZXMxWzNdOworCXU4CU1NQ1JSOworCXU4CXJlczJbM107CisJdTgJTU1GQ09OOworCXU4CXJlczNbM107CisJdTgJTU1TVEE7CisJdTgJcmVzNFszXTsKKwl1MTYJTU1GU1RBOworCXUxNglyZXM1OworCXU4CU1NUFJFOworCXU4CXJlczZbM107CisJdTE2CU1NTEVOOworCXUxNglyZXM3OworCXU4CU1NQ1I3OworCXU4CXJlczhbM107CisJdTMyCU1NUlNQWzRdOworCXU4CU1NQ01EMDsKKwl1OAlyZXM5WzNdOworCXUzMglNTUNNRDE7CisJdTE2CU1NQ1IxNjsKKwl1MTYJcmVzMTA7CisJdTgJTU1EQVQ7CisJdTgJcmVzMTFbM107CisjZW5kaWYKK307CisKKworLyogU0QgSU5URVJGQUNFIChzZWUgUzNDMjQxMCBtYW51YWwgY2hhcHRlciAxOSkgKi8KK3N0cnVjdCBzM2MyNDEwX3NkaSB7CisJdTMyCVNESUNPTjsKKwl1MzIJU0RJUFJFOworCXUzMglTRElDQVJHOworCXUzMglTRElDQ09OOworCXUzMglTRElDU1RBOworCXUzMglTRElSU1AwOworCXUzMglTRElSU1AxOworCXUzMglTRElSU1AyOworCXUzMglTRElSU1AzOworCXUzMglTRElEVElNRVI7CisJdTMyCVNESUJTSVpFOworCXUzMglTRElEQ09OOworCXUzMglTRElEQ05UOworCXUzMglTRElEU1RBOworCXUzMglTRElGU1RBOworI2lmZGVmIF9fQklHX0VORElBTgorCXU4CXJlc1szXTsKKwl1OAlTRElEQVQ7CisjZWxzZQorCXU4CVNESURBVDsKKwl1OAlyZXNbM107CisjZW5kaWYKKwl1MzIJU0RJSU1TSzsKK307CisKKyNlbmRpZiAvKl9fUzNDMjRYMF9IX18qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjR4MC9zM2MyNHgwX2NwdS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjR4MC9zM2MyNHgwX2NwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzN2Q0YTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNHgwL3MzYzI0eDBfY3B1LmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOQorICogS2V2aW4gTW9yZml0dCwgRmVhcm5zaWRlIFN5c3RlbXMgTHRkLCA8a2V2aW4ubW9yZml0dEBmZWFybnNpZGUtc3lzdGVtcy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZkZWYgQ09ORklHX1MzQzI0MDAKKwkjaW5jbHVkZSA8YXNtL2FyY2gvczNjMjQwMC5oPgorI2VsaWYgZGVmaW5lZCBDT05GSUdfUzNDMjQxMAorCSNpbmNsdWRlIDxhc20vYXJjaC9zM2MyNDEwLmg+CisjZWxzZQorCSNlcnJvciBQbGVhc2UgZGVmaW5lIHRoZSBzM2MyNHgwIGNwdSB0eXBlCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvczNjNjQwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjNjR4eC9zM2M2NDAwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvczNjNjQwMC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2M2NHh4L3MzYzY0MDAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zM2M2NHgwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2M2NHh4L3MzYzY0eDAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9zM2M2NHgwLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzY0eHgvczNjNjR4MC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC10eXBlcy5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gtdHlwZXMuaAppbmRleCA2YzFmNWFjLi5mMWY3ZDkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC10eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoLXR5cGVzLmgKQEAgLTEsOSArMSw2IEBACiAvKgotICogVGhpcyB3YXMgYXV0b21hZ2ljYWxseSBnZW5lcmF0ZWQgZnJvbSBtYWNoLXR5cGVzIQorICogVGhpcyB3YXMgYXV0b21hZ2ljYWxseSBnZW5lcmF0ZWQgZnJvbSBhcmNoL2FybS90b29scy9tYWNoLXR5cGVzIQogICogRG8gTk9UIGVkaXQKLSAqCi0gKiBMYXN0IHVwZGF0ZTogRnJpIFNlcCA0IDIyOjE2OjIyIDIwMDkKLSAqCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9BUk1fTUFDSF9UWVBFX0gKQEAgLTE2MzcsNyArMTYzNCw3IEBACiAjZGVmaW5lIE1BQ0hfVFlQRV9BTUxfTTgwNTAgICAgICAgICAgICAxNjQ0CiAjZGVmaW5lIE1BQ0hfVFlQRV9NWDM1XzNEUyAgICAgICAgICAgICAxNjQ1CiAjZGVmaW5lIE1BQ0hfVFlQRV9NQVJTICAgICAgICAgICAgICAgICAxNjQ2Ci0jZGVmaW5lIE1BQ0hfVFlQRV9OVE9TRF82NDRYQSAgICAgICAgICAxNjQ3CisjZGVmaW5lIE1BQ0hfVFlQRV9ORVVST1NfT1NEMiAgICAgICAgICAxNjQ3CiAjZGVmaW5lIE1BQ0hfVFlQRV9CQURHRVIgICAgICAgICAgICAgICAxNjQ4CiAjZGVmaW5lIE1BQ0hfVFlQRV9UUklaRVBTNFdMICAgICAgICAgICAxNjQ5CiAjZGVmaW5lIE1BQ0hfVFlQRV9UUklaRVBTNSAgICAgICAgICAgICAxNjUwCkBAIC0xNjUzLDcgKzE2NTAsNyBAQAogI2RlZmluZSBNQUNIX1RZUEVfWk9SQU40M1hYICAgICAgICAgICAgMTY2MAogI2RlZmluZSBNQUNIX1RZUEVfU09OSVg5MjYgICAgICAgICAgICAgMTY2MQogI2RlZmluZSBNQUNIX1RZUEVfQ0VMRVNUSUFMU0VNSSAgICAgICAgMTY2MgotI2RlZmluZSBNQUNIX1RZUEVfQ0M5TTI0NDMgICAgICAgICAgICAgMTY2MworI2RlZmluZSBNQUNIX1RZUEVfQ0M5TTI0NDNKUyAgICAgICAgICAgMTY2MwogI2RlZmluZSBNQUNIX1RZUEVfVFc1MzM0ICAgICAgICAgICAgICAgMTY2NAogI2RlZmluZSBNQUNIX1RZUEVfSFRDQVJURU1JUyAgICAgICAgICAgMTY2NQogI2RlZmluZSBNQUNIX1RZUEVfTkFMX0hMSVRFICAgICAgICAgICAgMTY2NgpAQCAtMTc3NSw2ICsxNzcyLDcgQEAKICNkZWZpbmUgTUFDSF9UWVBFX1dERzAwMiAgICAgICAgICAgICAgIDE3ODUKICNkZWZpbmUgTUFDSF9UWVBFX1NHNTYwQURTTCAgICAgICAgICAgIDE3ODYKICNkZWZpbmUgTUFDSF9UWVBFX05FWFRJT19OMjgwMF9JQ0EgICAgIDE3ODcKKyNkZWZpbmUgTUFDSF9UWVBFX01BQ0hfTUFSVkVMTF9ORVcxICAgIDE3ODgKICNkZWZpbmUgTUFDSF9UWVBFX01BUlZFTExfTkVXREIgICAgICAgIDE3ODkKICNkZWZpbmUgTUFDSF9UWVBFX1ZBTkRJSFVEICAgICAgICAgICAgIDE3OTAKICNkZWZpbmUgTUFDSF9UWVBFX01BR1hfRTggICAgICAgICAgICAgIDE3OTEKQEAgLTE4MDEsNyArMTc5OSw3IEBACiAjZGVmaW5lIE1BQ0hfVFlQRV9SRDg4RjUxODFMX0dFICAgICAgICAxODEyCiAjZGVmaW5lIE1BQ0hfVFlQRV9TSUZNQUlOICAgICAgICAgICAgICAxODEzCiAjZGVmaW5lIE1BQ0hfVFlQRV9TQU05X0w5MjYxICAgICAgICAgICAxODE0Ci0jZGVmaW5lIE1BQ0hfVFlQRV9DQzlNMjQ0M0pTICAgICAgICAgICAxODE1CisjZGVmaW5lIE1BQ0hfVFlQRV9DQzlNMjQ0MyAgICAgICAgICAgICAxODE1CiAjZGVmaW5lIE1BQ0hfVFlQRV9YQVJJQTMwMCAgICAgICAgICAgICAxODE2CiAjZGVmaW5lIE1BQ0hfVFlQRV9JVDkyMDAgICAgICAgICAgICAgICAxODE3CiAjZGVmaW5lIE1BQ0hfVFlQRV9SRDg4RjUxODFMX0ZYTyAgICAgICAxODE4CkBAIC0yNDAxLDYgKzIzOTksMTU0IEBACiAjZGVmaW5lIE1BQ0hfVFlQRV9NVUxUSUJVU19NQVNURVIgICAgICAyNDE2CiAjZGVmaW5lIE1BQ0hfVFlQRV9NVUxUSUJVU19QQksgICAgICAgICAyNDE3CiAjZGVmaW5lIE1BQ0hfVFlQRV9UTkVUVjEwN1ggICAgICAgICAgICAyNDE4CisjZGVmaW5lIE1BQ0hfVFlQRV9TTkFLRSAgICAgICAgICAgICAgICAyNDE5CisjZGVmaW5lIE1BQ0hfVFlQRV9DV01YMjcgICAgICAgICAgICAgICAyNDIwCisjZGVmaW5lIE1BQ0hfVFlQRV9TQ0hfTTQ4MCAgICAgICAgICAgICAyNDIxCisjZGVmaW5lIE1BQ0hfVFlQRV9QTEFUWVBVUyAgICAgICAgICAgICAyNDIyCisjZGVmaW5lIE1BQ0hfVFlQRV9QU1MyICAgICAgICAgICAgICAgICAyNDIzCisjZGVmaW5lIE1BQ0hfVFlQRV9EQVZJTkNJX0FQTTE1MCAgICAgICAyNDI0CisjZGVmaW5lIE1BQ0hfVFlQRV9TVFI5MTAwICAgICAgICAgICAgICAyNDI1CisjZGVmaW5lIE1BQ0hfVFlQRV9ORVQ1QklHICAgICAgICAgICAgICAyNDI2CisjZGVmaW5lIE1BQ0hfVFlQRV9TRUFCRUQ5MjYzICAgICAgICAgICAyNDI3CisjZGVmaW5lIE1BQ0hfVFlQRV9NWDUxX00ySUQgICAgICAgICAgICAyNDI4CisjZGVmaW5lIE1BQ0hfVFlQRV9PQ1RWT0NQTFVTX0VCICAgICAgICAyNDI5CisjZGVmaW5lIE1BQ0hfVFlQRV9LTEtfRklSRUZPWCAgICAgICAgICAyNDMwCisjZGVmaW5lIE1BQ0hfVFlQRV9LTEtfV0lSTUFfTU9EVUxFICAgICAyNDMxCisjZGVmaW5lIE1BQ0hfVFlQRV9LTEtfV0lSTUFfTU1JICAgICAgICAyNDMyCisjZGVmaW5lIE1BQ0hfVFlQRV9TVVBFUlNPTklDICAgICAgICAgICAyNDMzCisjZGVmaW5lIE1BQ0hfVFlQRV9MSUJFUlRZICAgICAgICAgICAgICAyNDM0CisjZGVmaW5lIE1BQ0hfVFlQRV9NSDM1NSAgICAgICAgICAgICAgICAyNDM1CisjZGVmaW5lIE1BQ0hfVFlQRV9QQzc4MDIgICAgICAgICAgICAgICAyNDM2CisjZGVmaW5lIE1BQ0hfVFlQRV9HTkVUX1NHQyAgICAgICAgICAgICAyNDM3CisjZGVmaW5lIE1BQ0hfVFlQRV9FSU5TVEVJTjE1ICAgICAgICAgICAyNDM4CisjZGVmaW5lIE1BQ0hfVFlQRV9DTVBEICAgICAgICAgICAgICAgICAyNDM5CisjZGVmaW5lIE1BQ0hfVFlQRV9EQVZJTkNJX0hBU0UxICAgICAgICAyNDQwCisjZGVmaW5lIE1BQ0hfVFlQRV9MR0VJTkNJVEVQSE9ORSAgICAgICAyNDQxCisjZGVmaW5lIE1BQ0hfVFlQRV9FQTMxM1ggICAgICAgICAgICAgICAyNDQyCisjZGVmaW5lIE1BQ0hfVFlQRV9GV0JEXzM5MDY0ICAgICAgICAgICAyNDQzCisjZGVmaW5lIE1BQ0hfVFlQRV9GV0JEXzM5MDEyOCAgICAgICAgICAyNDQ0CisjZGVmaW5lIE1BQ0hfVFlQRV9QRUxDT19NT0UgICAgICAgICAgICAyNDQ1CisjZGVmaW5lIE1BQ0hfVFlQRV9NSU5JTUlYMjcgICAgICAgICAgICAyNDQ2CisjZGVmaW5lIE1BQ0hfVFlQRV9PTUFQM19USFVOREVSICAgICAgICAyNDQ3CisjZGVmaW5lIE1BQ0hfVFlQRV9QQVNTSU9OQyAgICAgICAgICAgICAyNDQ4CisjZGVmaW5lIE1BQ0hfVFlQRV9NWDI3QU1BVEEgICAgICAgICAgICAyNDQ5CisjZGVmaW5lIE1BQ0hfVFlQRV9CR0FUMSAgICAgICAgICAgICAgICAyNDUwCisjZGVmaW5lIE1BQ0hfVFlQRV9CVVpaICAgICAgICAgICAgICAgICAyNDUxCisjZGVmaW5lIE1BQ0hfVFlQRV9NQjlHMjAgICAgICAgICAgICAgICAyNDUyCisjZGVmaW5lIE1BQ0hfVFlQRV9ZVVNIQU4gICAgICAgICAgICAgICAyNDUzCisjZGVmaW5lIE1BQ0hfVFlQRV9MSVpBUkQgICAgICAgICAgICAgICAyNDU0CisjZGVmaW5lIE1BQ0hfVFlQRV9PTUFQM1BPTFlDT00gICAgICAgICAyNDU1CisjZGVmaW5lIE1BQ0hfVFlQRV9TTURLVjIxMCAgICAgICAgICAgICAyNDU2CisjZGVmaW5lIE1BQ0hfVFlQRV9CUkFWTyAgICAgICAgICAgICAgICAyNDU3CisjZGVmaW5lIE1BQ0hfVFlQRV9TSU9HRU5UT08xICAgICAgICAgICAyNDU4CisjZGVmaW5lIE1BQ0hfVFlQRV9TSU9HRU5UT08yICAgICAgICAgICAyNDU5CisjZGVmaW5lIE1BQ0hfVFlQRV9TTTNLICAgICAgICAgICAgICAgICAyNDYwCisjZGVmaW5lIE1BQ0hfVFlQRV9BQ0VSX1RFTVBPX0Y5MDAgICAgICAyNDYxCisjZGVmaW5lIE1BQ0hfVFlQRV9TU1Q2MVZDMDEwX0RFViAgICAgICAyNDYyCisjZGVmaW5lIE1BQ0hfVFlQRV9HTElUVEVSVElORCAgICAgICAgICAyNDYzCisjZGVmaW5lIE1BQ0hfVFlQRV9PTUFQX1pPT00zICAgICAgICAgICAyNDY0CisjZGVmaW5lIE1BQ0hfVFlQRV9PTUFQXzM2MzBTRFAgICAgICAgICAyNDY1CisjZGVmaW5lIE1BQ0hfVFlQRV9DWUJPT0syNDQwICAgICAgICAgICAyNDY2CisjZGVmaW5lIE1BQ0hfVFlQRV9UT1JJTk9fUyAgICAgICAgICAgICAyNDY3CisjZGVmaW5lIE1BQ0hfVFlQRV9IQVZBTkEgICAgICAgICAgICAgICAyNDY4CisjZGVmaW5lIE1BQ0hfVFlQRV9CRUFVTU9OVF8xMSAgICAgICAgICAyNDY5CisjZGVmaW5lIE1BQ0hfVFlQRV9WQU5HVUFSRCAgICAgICAgICAgICAyNDcwCisjZGVmaW5lIE1BQ0hfVFlQRV9TNVBDMTEwX0RSQUNPICAgICAgICAyNDcxCisjZGVmaW5lIE1BQ0hfVFlQRV9DQVJURVNJT19UV08gICAgICAgICAyNDcyCisjZGVmaW5lIE1BQ0hfVFlQRV9BU1RFUiAgICAgICAgICAgICAgICAyNDczCisjZGVmaW5lIE1BQ0hfVFlQRV9WT0dVRVNWMjEwICAgICAgICAgICAyNDc0CisjZGVmaW5lIE1BQ0hfVFlQRV9BQ001MDBYICAgICAgICAgICAgICAyNDc1CisjZGVmaW5lIE1BQ0hfVFlQRV9LTTkyNjAgICAgICAgICAgICAgICAyNDc2CisjZGVmaW5lIE1BQ0hfVFlQRV9OSURFRkxFWEcxICAgICAgICAgICAyNDc3CisjZGVmaW5lIE1BQ0hfVFlQRV9DVEVSQV9QTFVHX0lPICAgICAgICAyNDc4CisjZGVmaW5lIE1BQ0hfVFlQRV9TTUFSVFE3ICAgICAgICAgICAgICAyNDc5CisjZGVmaW5lIE1BQ0hfVFlQRV9BVDkxU0FNOUcxMEVLMiAgICAgICAyNDgwCisjZGVmaW5lIE1BQ0hfVFlQRV9BU1VTUDUyNyAgICAgICAgICAgICAyNDgxCisjZGVmaW5lIE1BQ0hfVFlQRV9BVDkxU0FNOUcyME1QTTIgICAgICAyNDgyCisjZGVmaW5lIE1BQ0hfVFlQRV9UT1BBU0E5MDAgICAgICAgICAgICAyNDgzCisjZGVmaW5lIE1BQ0hfVFlQRV9FTEVDVFJVTV8xMDAgICAgICAgICAyNDg0CisjZGVmaW5lIE1BQ0hfVFlQRV9NWDUxR1JCICAgICAgICAgICAgICAyNDg1CisjZGVmaW5lIE1BQ0hfVFlQRV9YRUEzMDAgICAgICAgICAgICAgICAyNDg2CisjZGVmaW5lIE1BQ0hfVFlQRV9IVENTVEFSVFJFSyAgICAgICAgICAyNDg3CisjZGVmaW5lIE1BQ0hfVFlQRV9MSU1BICAgICAgICAgICAgICAgICAyNDg4CisjZGVmaW5lIE1BQ0hfVFlQRV9DU0I3NDAgICAgICAgICAgICAgICAyNDg5CisjZGVmaW5lIE1BQ0hfVFlQRV9VU0JfUzg4MTUgICAgICAgICAgICAyNDkwCisjZGVmaW5lIE1BQ0hfVFlQRV9XQVRTT05fRUZNX1BMVUdJTiAgICAyNDkxCisjZGVmaW5lIE1BQ0hfVFlQRV9NSUxLWVdBWSAgICAgICAgICAgICAyNDkyCisjZGVmaW5lIE1BQ0hfVFlQRV9HNEVWTSAgICAgICAgICAgICAgICAyNDkzCisjZGVmaW5lIE1BQ0hfVFlQRV9QSUNPTU9ENiAgICAgICAgICAgICAyNDk0CisjZGVmaW5lIE1BQ0hfVFlQRV9PTUFQTDEzOF9IQVdLQk9BUkQgICAyNDk1CisjZGVmaW5lIE1BQ0hfVFlQRV9JUDYwMDAgICAgICAgICAgICAgICAyNDk2CisjZGVmaW5lIE1BQ0hfVFlQRV9JUDYwMTAgICAgICAgICAgICAgICAyNDk3CisjZGVmaW5lIE1BQ0hfVFlQRV9VVE00MDAgICAgICAgICAgICAgICAyNDk4CisjZGVmaW5lIE1BQ0hfVFlQRV9PTUFQM19aWUJFWCAgICAgICAgICAyNDk5CisjZGVmaW5lIE1BQ0hfVFlQRV9XSVJFTEVTU19TUEFDRSAgICAgICAyNTAwCisjZGVmaW5lIE1BQ0hfVFlQRV9TWDU2MCAgICAgICAgICAgICAgICAyNTAxCisjZGVmaW5lIE1BQ0hfVFlQRV9UUzQxWCAgICAgICAgICAgICAgICAyNTAyCisjZGVmaW5lIE1BQ0hfVFlQRV9FTFBIRUwxMDM3MyAgICAgICAgICAyNTAzCisjZGVmaW5lIE1BQ0hfVFlQRV9SSE9CT1QgICAgICAgICAgICAgICAyNTA0CisjZGVmaW5lIE1BQ0hfVFlQRV9NWDUxX1JFRlJFU0ggICAgICAgICAyNTA1CisjZGVmaW5lIE1BQ0hfVFlQRV9MUzkyNjAgICAgICAgICAgICAgICAyNTA2CisjZGVmaW5lIE1BQ0hfVFlQRV9TSEFOSyAgICAgICAgICAgICAgICAyNTA3CisjZGVmaW5lIE1BQ0hfVFlQRV9RU0Q4WDUwX1NUMSAgICAgICAgICAyNTA4CisjZGVmaW5lIE1BQ0hfVFlQRV9BVDkxU0FNOU0xMEVLRVMgICAgICAyNTA5CisjZGVmaW5lIE1BQ0hfVFlQRV9ISVJBTSAgICAgICAgICAgICAgICAyNTEwCisjZGVmaW5lIE1BQ0hfVFlQRV9QSFkzMjUwICAgICAgICAgICAgICAyNTExCisjZGVmaW5lIE1BQ0hfVFlQRV9FQTMyNTAgICAgICAgICAgICAgICAyNTEyCisjZGVmaW5lIE1BQ0hfVFlQRV9GREkzMjUwICAgICAgICAgICAgICAyNTEzCisjZGVmaW5lIE1BQ0hfVFlQRV9XSElURVNUT05FICAgICAgICAgICAyNTE0CisjZGVmaW5lIE1BQ0hfVFlQRV9BVDkxU0FNOTI2M05JVCAgICAgICAyNTE1CisjZGVmaW5lIE1BQ0hfVFlQRV9DQ01YNTEgICAgICAgICAgICAgICAyNTE2CisjZGVmaW5lIE1BQ0hfVFlQRV9DQ01YNTFKUyAgICAgICAgICAgICAyNTE3CisjZGVmaW5lIE1BQ0hfVFlQRV9DQ1dNWDUxICAgICAgICAgICAgICAyNTE4CisjZGVmaW5lIE1BQ0hfVFlQRV9DQ1dNWDUxSlMgICAgICAgICAgICAyNTE5CisjZGVmaW5lIE1BQ0hfVFlQRV9NSU5JNjQxMCAgICAgICAgICAgICAyNTIwCisjZGVmaW5lIE1BQ0hfVFlQRV9USU5ZNjQxMCAgICAgICAgICAgICAyNTIxCisjZGVmaW5lIE1BQ0hfVFlQRV9OQU5PNjQxMCAgICAgICAgICAgICAyNTIyCisjZGVmaW5lIE1BQ0hfVFlQRV9BVDU3MkQ5NDBIRk5MREIgICAgICAyNTIzCisjZGVmaW5lIE1BQ0hfVFlQRV9IVENMRU8gICAgICAgICAgICAgICAyNTI0CisjZGVmaW5lIE1BQ0hfVFlQRV9BVlAxMyAgICAgICAgICAgICAgICAyNTI1CisjZGVmaW5lIE1BQ0hfVFlQRV9YWFNWSURFT0QgICAgICAgICAgICAyNTI2CisjZGVmaW5lIE1BQ0hfVFlQRV9WUE5FWFQgICAgICAgICAgICAgICAyNTI3CisjZGVmaW5lIE1BQ0hfVFlQRV9TV0FSQ09fSVRDMyAgICAgICAgICAyNTI4CisjZGVmaW5lIE1BQ0hfVFlQRV9UWDUxICAgICAgICAgICAgICAgICAyNTI5CisjZGVmaW5lIE1BQ0hfVFlQRV9ET0xCWV9DQVQxMDIxICAgICAgICAyNTMwCisjZGVmaW5lIE1BQ0hfVFlQRV9NWDI4RVZLICAgICAgICAgICAgICAyNTMxCisjZGVmaW5lIE1BQ0hfVFlQRV9QSE9FTklYMjYwICAgICAgICAgICAyNTMyCisjZGVmaW5lIE1BQ0hfVFlQRV9VVkFDQV9TVE9SSyAgICAgICAgICAyNTMzCisjZGVmaW5lIE1BQ0hfVFlQRV9TTUFSVFE1ICAgICAgICAgICAgICAyNTM0CisjZGVmaW5lIE1BQ0hfVFlQRV9BTEwzMDc4ICAgICAgICAgICAgICAyNTM1CisjZGVmaW5lIE1BQ0hfVFlQRV9DVEVSQV8yQkFZX0RTICAgICAgICAyNTM2CisjZGVmaW5lIE1BQ0hfVFlQRV9TSU9HRU5UT08zICAgICAgICAgICAyNTM3CisjZGVmaW5lIE1BQ0hfVFlQRV9FUEI1MDAwICAgICAgICAgICAgICAyNTM4CisjZGVmaW5lIE1BQ0hfVFlQRV9IWTkyNjMgICAgICAgICAgICAgICAyNTM5CisjZGVmaW5lIE1BQ0hfVFlQRV9BQ0VSX1RFTVBPX005MDAgICAgICAyNTQwCisjZGVmaW5lIE1BQ0hfVFlQRV9BQ0VSX1RFTVBPX0RYOTAwICAgICAyNTQxCisjZGVmaW5lIE1BQ0hfVFlQRV9BQ0VSX1RFTVBPX1g5NjAgICAgICAyNTQyCisjZGVmaW5lIE1BQ0hfVFlQRV9BQ0VSX0VURU5fVjkwMCAgICAgICAyNTQzCisjZGVmaW5lIE1BQ0hfVFlQRV9BQ0VSX0VURU5fWDkwMCAgICAgICAyNTQ0CisjZGVmaW5lIE1BQ0hfVFlQRV9CT05ORUxMICAgICAgICAgICAgICAyNTQ1CisjZGVmaW5lIE1BQ0hfVFlQRV9PSFRfTVgyNyAgICAgICAgICAgICAyNTQ2CisjZGVmaW5lIE1BQ0hfVFlQRV9IVENRVUFSVFogICAgICAgICAgICAyNTQ3CisjZGVmaW5lIE1BQ0hfVFlQRV9EQVZJTkNJX0RNNjQ2N1RFVk0gICAyNTQ4CisjZGVmaW5lIE1BQ0hfVFlQRV9DM0FYMDMgICAgICAgICAgICAgICAyNTQ5CisjZGVmaW5lIE1BQ0hfVFlQRV9NWFRfVEQ2MCAgICAgICAgICAgICAyNTUwCisjZGVmaW5lIE1BQ0hfVFlQRV9FU1lYICAgICAgICAgICAgICAgICAyNTUxCisjZGVmaW5lIE1BQ0hfVFlQRV9ET1ZFX0RCICAgICAgICAgICAgICAyNTUyCisjZGVmaW5lIE1BQ0hfVFlQRV9CVUxMRE9HICAgICAgICAgICAgICAyNTUzCisjZGVmaW5lIE1BQ0hfVFlQRV9ERVJFTExfTUUyMDAwICAgICAgICAyNTU0CisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX0JBU0UgICAgICAgICAyNTU1CisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX0VWTSAgICAgICAgICAyNTU2CisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX0VWTV9KQVpaICAgICAyNTU3CisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX1NQICAgICAgICAgICAyNTU4CisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX1NWICAgICAgICAgICAyNTU5CisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX1NWX0pBWlogICAgICAyNTYwCisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX1RBQkxFVCAgICAgICAyNTYxCisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX1ZQICAgICAgICAgICAyNTYyCisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX0VWTV9TRUlLT1IgICAyNTYzCisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX1NQX1dRVkdBICAgICAyNTY0CisjZGVmaW5lIE1BQ0hfVFlQRV9CQ01SSU5HX0NVU1RPTSAgICAgICAyNTY1CisjZGVmaW5lIE1BQ0hfVFlQRV9BQ0VSX1MyMDAgICAgICAgICAgICAyNTY2CiAKICNpZmRlZiBDT05GSUdfQVJDSF9FQlNBMTEwCiAjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCkBAIC0xMzM1Myw5ICsxMzQ5OSw5IEBACiAjIGVsc2UKICMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfUkVBXzJECiAjIGVuZGlmCi0jIGRlZmluZSBtYWNoaW5lX2lzX3JlYV8yZCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfUkVBXzJEKQorIyBkZWZpbmUgbWFjaGluZV9pc19yZWFfY3B1MigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfUkVBXzJEKQogI2Vsc2UKLSMgZGVmaW5lIG1hY2hpbmVfaXNfcmVhXzJkKCkJKDApCisjIGRlZmluZSBtYWNoaW5lX2lzX3JlYV9jcHUyKCkJKDApCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NQUNIX1RJM0U1MjQKQEAgLTIxODY2LDE2ICsyMjAxMiwxNiBAQAogIyBkZWZpbmUgbWFjaGluZV9pc19tYXJzKCkJKDApCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NQUNIX05UT1NEXzY0NFhBCisjaWZkZWYgQ09ORklHX01BQ0hfTkVVUk9TX09TRDIKICMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKICMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCiAjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQogIyBlbHNlCi0jICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX05UT1NEXzY0NFhBCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX05FVVJPU19PU0QyCiAjIGVuZGlmCi0jIGRlZmluZSBtYWNoaW5lX2lzX250b3NkXzY0NHhhKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9OVE9TRF82NDRYQSkKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbmV1cm9zX29zZDIoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX05FVVJPU19PU0QyKQogI2Vsc2UKLSMgZGVmaW5lIG1hY2hpbmVfaXNfbnRvc2RfNjQ0eGEoKQkoMCkKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbmV1cm9zX29zZDIoKQkoMCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BQ0hfQkFER0VSCkBAIC0yMjA1OCwxNiArMjIyMDQsMTYgQEAKICMgZGVmaW5lIG1hY2hpbmVfaXNfY2VsZXN0aWFsc2VtaSgpCSgwKQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfTUFDSF9DQzlNMjQ0MworI2lmZGVmIENPTkZJR19NQUNIX0NDOU0yNDQzSlMKICMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKICMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCiAjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQogIyBlbHNlCi0jICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0NDOU0yNDQzCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0NDOU0yNDQzSlMKICMgZW5kaWYKLSMgZGVmaW5lIG1hY2hpbmVfaXNfY2M5bTI0NDMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0NDOU0yNDQzKQorIyBkZWZpbmUgbWFjaGluZV9pc19jYzltMjQ0M2pzKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9DQzlNMjQ0M0pTKQogI2Vsc2UKLSMgZGVmaW5lIG1hY2hpbmVfaXNfY2M5bTI0NDMoKQkoMCkKKyMgZGVmaW5lIG1hY2hpbmVfaXNfY2M5bTI0NDNqcygpCSgwKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFDSF9UVzUzMzQKQEAgLTIzNTIyLDYgKzIzNjY4LDE4IEBACiAjIGRlZmluZSBtYWNoaW5lX2lzX25leHRpb19uMjgwMF9pY2EoKQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01BQ0hfTUFDSF9NQVJWRUxMX05FVzEKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX01BQ0hfTUFSVkVMTF9ORVcxCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2RvdmVfZGIoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX01BQ0hfTUFSVkVMTF9ORVcxKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZG92ZV9kYigpCSgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTUFDSF9NQVJWRUxMX05FV0RCCiAjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCiAjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQpAQCAtMjM4MzQsMTYgKzIzOTkyLDE2IEBACiAjIGRlZmluZSBtYWNoaW5lX2lzX3NhbTlfbDkyNjEoKQkoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01BQ0hfQ0M5TTI0NDNKUworI2lmZGVmIENPTkZJR19NQUNIX0NDOU0yNDQzCiAjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCiAjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQogIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKICMgZWxzZQotIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9DQzlNMjQ0M0pTCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0NDOU0yNDQzCiAjIGVuZGlmCi0jIGRlZmluZSBtYWNoaW5lX2lzX2NjOW0yNDQzanMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0NDOU0yNDQzSlMpCisjIGRlZmluZSBtYWNoaW5lX2lzX2NjOW0yNDQzKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9DQzlNMjQ0MykKICNlbHNlCi0jIGRlZmluZSBtYWNoaW5lX2lzX2NjOW0yNDQzanMoKQkoMCkKKyMgZGVmaW5lIG1hY2hpbmVfaXNfY2M5bTI0NDMoKQkoMCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BQ0hfWEFSSUEzMDAKQEAgLTMxMDM0LDYgKzMxMTkyLDE3ODIgQEAKICMgZGVmaW5lIG1hY2hpbmVfaXNfdG5ldHYxMDd4KCkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NQUNIX1NOQUtFCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9TTkFLRQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19zbmFrZSgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfU05BS0UpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19zbmFrZSgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9DV01YMjcKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0NXTVgyNworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19jd214MjcoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0NXTVgyNykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2N3bXgyNygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9TQ0hfTTQ4MAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfU0NIX000ODAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc2NoX200ODAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1NDSF9NNDgwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc2NoX200ODAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfUExBVFlQVVMKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1BMQVRZUFVTCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3BsYXR5cHVzKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9QTEFUWVBVUykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3BsYXR5cHVzKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1BTUzIKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1BTUzIKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcHNzMigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfUFNTMikKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3BzczIoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9BUE0xNTAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0RBVklOQ0lfQVBNMTUwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2RhdmluY2lfYXBtMTUwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9EQVZJTkNJX0FQTTE1MCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2RhdmluY2lfYXBtMTUwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1NUUjkxMDAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1NUUjkxMDAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc3RyOTEwMCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfU1RSOTEwMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3N0cjkxMDAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTkVUNUJJRworIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfTkVUNUJJRworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19uZXQ1YmlnKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9ORVQ1QklHKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbmV0NWJpZygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9TRUFCRUQ5MjYzCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9TRUFCRUQ5MjYzCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3NlYWJlZDkyNjMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1NFQUJFRDkyNjMpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19zZWFiZWQ5MjYzKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX01YNTFfTTJJRAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfTVg1MV9NMklECisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX214NTFfbTJpZCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfTVg1MV9NMklEKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbXg1MV9tMmlkKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX09DVFZPQ1BMVVNfRUIKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX09DVFZPQ1BMVVNfRUIKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb2N0dm9jcGx1c19lYigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfT0NUVk9DUExVU19FQikKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX29jdHZvY3BsdXNfZWIoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfS0xLX0ZJUkVGT1gKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0tMS19GSVJFRk9YCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2tsa19maXJlZm94KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9LTEtfRklSRUZPWCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2tsa19maXJlZm94KCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0tMS19XSVJNQV9NT0RVTEUKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0tMS19XSVJNQV9NT0RVTEUKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfa2xrX3dpcm1hX21vZHVsZSgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfS0xLX1dJUk1BX01PRFVMRSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2tsa193aXJtYV9tb2R1bGUoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfS0xLX1dJUk1BX01NSQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfS0xLX1dJUk1BX01NSQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19rbGtfd2lybWFfbW1pKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9LTEtfV0lSTUFfTU1JKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfa2xrX3dpcm1hX21taSgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9TVVBFUlNPTklDCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9TVVBFUlNPTklDCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3N1cGVyc29uaWMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1NVUEVSU09OSUMpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19zdXBlcnNvbmljKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0xJQkVSVFkKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0xJQkVSVFkKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbGliZXJ0eSgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfTElCRVJUWSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2xpYmVydHkoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTUgzNTUKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX01IMzU1CisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX21oMzU1KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9NSDM1NSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX21oMzU1KCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1BDNzgwMgorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfUEM3ODAyCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3BjNzgwMigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfUEM3ODAyKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcGM3ODAyKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0dORVRfU0dDCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9HTkVUX1NHQworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19nbmV0X3NnYygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfR05FVF9TR0MpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19nbmV0X3NnYygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9FSU5TVEVJTjE1CisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9FSU5TVEVJTjE1CisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2VpbnN0ZWluMTUoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0VJTlNURUlOMTUpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19laW5zdGVpbjE1KCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0NNUEQKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0NNUEQKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfY21wZCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQ01QRCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2NtcGQoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9IQVNFMQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfREFWSU5DSV9IQVNFMQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19kYXZpbmNpX2hhc2UxKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9EQVZJTkNJX0hBU0UxKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZGF2aW5jaV9oYXNlMSgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9MR0VJTkNJVEVQSE9ORQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfTEdFSU5DSVRFUEhPTkUKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbGdlaW5jaXRlcGhvbmUoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0xHRUlOQ0lURVBIT05FKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbGdlaW5jaXRlcGhvbmUoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRUEzMTNYCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9FQTMxM1gKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZWEzMTN4KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9FQTMxM1gpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19lYTMxM3goKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRldCRF8zOTA2NAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfRldCRF8zOTA2NAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19md2JkXzM5MDY0KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9GV0JEXzM5MDY0KQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZndiZF8zOTA2NCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9GV0JEXzM5MDEyOAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfRldCRF8zOTAxMjgKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZndiZF8zOTAxMjgoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0ZXQkRfMzkwMTI4KQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZndiZF8zOTAxMjgoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfUEVMQ09fTU9FCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9QRUxDT19NT0UKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcGVsY29fbW9lKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9QRUxDT19NT0UpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19wZWxjb19tb2UoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTUlOSU1JWDI3CisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9NSU5JTUlYMjcKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbWluaW1peDI3KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9NSU5JTUlYMjcpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19taW5pbWl4MjcoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUDNfVEhVTkRFUgorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfT01BUDNfVEhVTkRFUgorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19vbWFwM190aHVuZGVyKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9PTUFQM19USFVOREVSKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb21hcDNfdGh1bmRlcigpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9QQVNTSU9OQworIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfUEFTU0lPTkMKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcGFzc2lvbmMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1BBU1NJT05DKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcGFzc2lvbmMoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyN0FNQVRBCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9NWDI3QU1BVEEKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbXgyN2FtYXRhKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9NWDI3QU1BVEEpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19teDI3YW1hdGEoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQkdBVDEKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0JHQVQxCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2JnYXQxKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9CR0FUMSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2JnYXQxKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0JVWloKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0JVWloKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYnV6eigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQlVaWikKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2J1enooKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTUI5RzIwCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9NQjlHMjAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbWI5ZzIwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9NQjlHMjApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19tYjlnMjAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfWVVTSEFOCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9ZVVNIQU4KKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfeXVzaGFuKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9ZVVNIQU4pCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc195dXNoYW4oKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTElaQVJECisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9MSVpBUkQKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbGl6YXJkKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9MSVpBUkQpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19saXphcmQoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUDNQT0xZQ09NCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9PTUFQM1BPTFlDT00KKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb21hcDNwb2x5Y29tKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9PTUFQM1BPTFlDT00pCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19vbWFwM3BvbHljb20oKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfU01ES1YyMTAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1NNREtWMjEwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3NtZGt2MjEwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9TTURLVjIxMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3NtZGt2MjEwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0JSQVZPCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9CUkFWTworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19icmF2bygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQlJBVk8pCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19icmF2bygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9TSU9HRU5UT08xCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9TSU9HRU5UT08xCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3Npb2dlbnRvbzEoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1NJT0dFTlRPTzEpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19zaW9nZW50b28xKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1NJT0dFTlRPTzIKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1NJT0dFTlRPTzIKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc2lvZ2VudG9vMigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfU0lPR0VOVE9PMikKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3Npb2dlbnRvbzIoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfU00zSworIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfU00zSworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19zbTNrKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9TTTNLKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc20zaygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BQ0VSX1RFTVBPX0Y5MDAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0FDRVJfVEVNUE9fRjkwMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hY2VyX3RlbXBvX2Y5MDAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FDRVJfVEVNUE9fRjkwMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2FjZXJfdGVtcG9fZjkwMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9TU1Q2MVZDMDEwX0RFVgorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfU1NUNjFWQzAxMF9ERVYKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc3N0NjF2YzAxMF9kZXYoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1NTVDYxVkMwMTBfREVWKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc3N0NjF2YzAxMF9kZXYoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfR0xJVFRFUlRJTkQKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0dMSVRURVJUSU5ECisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2dsaXR0ZXJ0aW5kKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9HTElUVEVSVElORCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2dsaXR0ZXJ0aW5kKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX09NQVBfWk9PTTMKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX09NQVBfWk9PTTMKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb21hcF96b29tMygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfT01BUF9aT09NMykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX29tYXBfem9vbTMoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUF8zNjMwU0RQCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9PTUFQXzM2MzBTRFAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb21hcF8zNjMwc2RwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9PTUFQXzM2MzBTRFApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19vbWFwXzM2MzBzZHAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQ1lCT09LMjQ0MAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQ1lCT09LMjQ0MAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19jeWJvb2syNDQwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9DWUJPT0syNDQwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfY3lib29rMjQ0MCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9UT1JJTk9fUworIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfVE9SSU5PX1MKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfdG9yaW5vX3MoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1RPUklOT19TKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfdG9yaW5vX3MoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfSEFWQU5BCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9IQVZBTkEKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfaGF2YW5hKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9IQVZBTkEpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19oYXZhbmEoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQkVBVU1PTlRfMTEKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0JFQVVNT05UXzExCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2JlYXVtb250XzExKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9CRUFVTU9OVF8xMSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2JlYXVtb250XzExKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1ZBTkdVQVJECisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9WQU5HVUFSRAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc192YW5ndWFyZCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfVkFOR1VBUkQpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc192YW5ndWFyZCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9TNVBDMTEwX0RSQUNPCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9TNVBDMTEwX0RSQUNPCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3M1cGMxMTBfZHJhY28oKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1M1UEMxMTBfRFJBQ08pCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19zNXBjMTEwX2RyYWNvKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0NBUlRFU0lPX1RXTworIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQ0FSVEVTSU9fVFdPCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2NhcnRlc2lvX3R3bygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQ0FSVEVTSU9fVFdPKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfY2FydGVzaW9fdHdvKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0FTVEVSCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9BU1RFUgorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hc3RlcigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQVNURVIpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19hc3RlcigpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9WT0dVRVNWMjEwCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9WT0dVRVNWMjEwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3ZvZ3Vlc3YyMTAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1ZPR1VFU1YyMTApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc192b2d1ZXN2MjEwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0FDTTUwMFgKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0FDTTUwMFgKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYWNtNTAweCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQUNNNTAwWCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2FjbTUwMHgoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfS005MjYwCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9LTTkyNjAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfa205MjYwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9LTTkyNjApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19rbTkyNjAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTklERUZMRVhHMQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfTklERUZMRVhHMQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19uaWRlZmxleGcxKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9OSURFRkxFWEcxKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbmlkZWZsZXhnMSgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9DVEVSQV9QTFVHX0lPCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9DVEVSQV9QTFVHX0lPCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2N0ZXJhX3BsdWdfaW8oKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0NURVJBX1BMVUdfSU8pCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19jdGVyYV9wbHVnX2lvKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1NNQVJUUTcKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1NNQVJUUTcKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc21hcnRxNygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfU01BUlRRNykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3NtYXJ0cTcoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQVQ5MVNBTTlHMTBFSzIKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0FUOTFTQU05RzEwRUsyCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2F0OTFzYW05ZzEwZWsyKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9BVDkxU0FNOUcxMEVLMikKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2F0OTFzYW05ZzEwZWsyKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0FTVVNQNTI3CisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9BU1VTUDUyNworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hc3VzcDUyNygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQVNVU1A1MjcpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19hc3VzcDUyNygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BVDkxU0FNOUcyME1QTTIKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0FUOTFTQU05RzIwTVBNMgorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hdDkxc2FtOWcyMG1wbTIoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FUOTFTQU05RzIwTVBNMikKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2F0OTFzYW05ZzIwbXBtMigpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9UT1BBU0E5MDAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1RPUEFTQTkwMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc190b3Bhc2E5MDAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1RPUEFTQTkwMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3RvcGFzYTkwMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9FTEVDVFJVTV8xMDAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0VMRUNUUlVNXzEwMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19lbGVjdHJ1bV8xMDAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0VMRUNUUlVNXzEwMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2VsZWN0cnVtXzEwMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDUxR1JCCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9NWDUxR1JCCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX214NTFncmIoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX01YNTFHUkIpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19teDUxZ3JiKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1hFQTMwMAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfWEVBMzAwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3hlYTMwMCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfWEVBMzAwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfeGVhMzAwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0hUQ1NUQVJUUkVLCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9IVENTVEFSVFJFSworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19odGNzdGFydHJlaygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfSFRDU1RBUlRSRUspCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19odGNzdGFydHJlaygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9MSU1BCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9MSU1BCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2xpbWEoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0xJTUEpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19saW1hKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0NTQjc0MAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQ1NCNzQwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2NzYjc0MCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQ1NCNzQwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfY3NiNzQwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1VTQl9TODgxNQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfVVNCX1M4ODE1CisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3VzYl9zODgxNSgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfVVNCX1M4ODE1KQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfdXNiX3M4ODE1KCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1dBVFNPTl9FRk1fUExVR0lOCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9XQVRTT05fRUZNX1BMVUdJTgorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc193YXRzb25fZWZtX3BsdWdpbigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfV0FUU09OX0VGTV9QTFVHSU4pCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc193YXRzb25fZWZtX3BsdWdpbigpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NSUxLWVdBWQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfTUlMS1lXQVkKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbWlsa3l3YXkoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX01JTEtZV0FZKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbWlsa3l3YXkoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRzRFVk0KKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0c0RVZNCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2c0ZXZtKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9HNEVWTSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2c0ZXZtKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1BJQ09NT0Q2CisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9QSUNPTU9ENgorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19waWNvbW9kNigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfUElDT01PRDYpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19waWNvbW9kNigpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQTDEzOF9IQVdLQk9BUkQKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX09NQVBMMTM4X0hBV0tCT0FSRAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19vbWFwbDEzOF9oYXdrYm9hcmQoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX09NQVBMMTM4X0hBV0tCT0FSRCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX29tYXBsMTM4X2hhd2tib2FyZCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9JUDYwMDAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0lQNjAwMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19pcDYwMDAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0lQNjAwMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2lwNjAwMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9JUDYwMTAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0lQNjAxMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19pcDYwMTAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0lQNjAxMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2lwNjAxMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9VVE00MDAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1VUTTQwMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc191dG00MDAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1VUTTQwMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3V0bTQwMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQM19aWUJFWAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfT01BUDNfWllCRVgKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb21hcDNfenliZXgoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX09NQVAzX1pZQkVYKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb21hcDNfenliZXgoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfV0lSRUxFU1NfU1BBQ0UKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1dJUkVMRVNTX1NQQUNFCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3dpcmVsZXNzX3NwYWNlKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9XSVJFTEVTU19TUEFDRSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3dpcmVsZXNzX3NwYWNlKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1NYNTYwCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9TWDU2MAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19zeDU2MCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfU1g1NjApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19zeDU2MCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9UUzQxWAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfVFM0MVgKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfdHM0MXgoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1RTNDFYKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfdHM0MXgoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRUxQSEVMMTAzNzMKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0VMUEhFTDEwMzczCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2VscGhlbDEwMzczKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9FTFBIRUwxMDM3MykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2VscGhlbDEwMzczKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1JIT0JPVAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfUkhPQk9UCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3Job2JvdCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfUkhPQk9UKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcmhvYm90KCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX01YNTFfUkVGUkVTSAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfTVg1MV9SRUZSRVNICisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX214NTFfcmVmcmVzaCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfTVg1MV9SRUZSRVNIKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbXg1MV9yZWZyZXNoKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0xTOTI2MAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfTFM5MjYwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2xzOTI2MCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfTFM5MjYwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbHM5MjYwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1NIQU5LCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9TSEFOSworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19zaGFuaygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfU0hBTkspCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19zaGFuaygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9RU0Q4WDUwX1NUMQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfUVNEOFg1MF9TVDEKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcXNkOHg1MF9zdDEoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1FTRDhYNTBfU1QxKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcXNkOHg1MF9zdDEoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQVQ5MVNBTTlNMTBFS0VTCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9BVDkxU0FNOU0xMEVLRVMKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYXQ5MXNhbTltMTBla2VzKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9BVDkxU0FNOU0xMEVLRVMpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19hdDkxc2FtOW0xMGVrZXMoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfSElSQU0KKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0hJUkFNCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2hpcmFtKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9ISVJBTSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2hpcmFtKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1BIWTMyNTAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1BIWTMyNTAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcGh5MzI1MCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfUEhZMzI1MCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3BoeTMyNTAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRUEzMjUwCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9FQTMyNTAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZWEzMjUwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9FQTMyNTApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19lYTMyNTAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRkRJMzI1MAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfRkRJMzI1MAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19mZGkzMjUwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9GREkzMjUwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZmRpMzI1MCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9XSElURVNUT05FCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9XSElURVNUT05FCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3doaXRlc3RvbmUoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX1dISVRFU1RPTkUpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc193aGl0ZXN0b25lKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0FUOTFTQU05MjYzTklUCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9BVDkxU0FNOTI2M05JVAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hdDkxc2FtOTI2M25pdCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQVQ5MVNBTTkyNjNOSVQpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19hdDkxc2FtOTI2M25pdCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9DQ01YNTEKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0NDTVg1MQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19jY214NTEoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0NDTVg1MSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2NjbXg1MSgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9DQ01YNTFKUworIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQ0NNWDUxSlMKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfY2NteDUxanMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0NDTVg1MUpTKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfY2NteDUxanMoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQ0NXTVg1MQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQ0NXTVg1MQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19jY3dteDUxKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9DQ1dNWDUxKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfY2N3bXg1MSgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9DQ1dNWDUxSlMKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0NDV01YNTFKUworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19jY3dteDUxanMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0NDV01YNTFKUykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2Njd214NTFqcygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NSU5JNjQxMAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfTUlOSTY0MTAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbWluaTY0MTAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX01JTkk2NDEwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfbWluaTY0MTAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfVElOWTY0MTAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1RJTlk2NDEwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3Rpbnk2NDEwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9USU5ZNjQxMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3Rpbnk2NDEwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX05BTk82NDEwCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9OQU5PNjQxMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19uYW5vNjQxMCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfTkFOTzY0MTApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19uYW5vNjQxMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BVDU3MkQ5NDBIRk5MREIKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0FUNTcyRDk0MEhGTkxEQgorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hdDU3MmQ5NDBoZm5sZGIoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FUNTcyRDk0MEhGTkxEQikKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2F0NTcyZDk0MGhmbmxkYigpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9IVENMRU8KKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0hUQ0xFTworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19odGNsZW8oKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0hUQ0xFTykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2h0Y2xlbygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BVlAxMworIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQVZQMTMKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYXZwMTMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FWUDEzKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYXZwMTMoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfWFhTVklERU9ECisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9YWFNWSURFT0QKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfeHhzdmlkZW9kKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9YWFNWSURFT0QpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc194eHN2aWRlb2QoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfVlBORVhUCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9WUE5FWFQKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfdnBuZXh0KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9WUE5FWFQpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc192cG5leHQoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfU1dBUkNPX0lUQzMKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1NXQVJDT19JVEMzCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3N3YXJjb19pdGMzKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9TV0FSQ09fSVRDMykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3N3YXJjb19pdGMzKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1RYNTEKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1RYNTEKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfdHg1MSgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfVFg1MSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3R4NTEoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRE9MQllfQ0FUMTAyMQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfRE9MQllfQ0FUMTAyMQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19kb2xieV9jYXQxMDIxKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9ET0xCWV9DQVQxMDIxKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZG9sYnlfY2F0MTAyMSgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI4RVZLCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9NWDI4RVZLCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX214MjhldmsoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX01YMjhFVkspCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19teDI4ZXZrKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1BIT0VOSVgyNjAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1BIT0VOSVgyNjAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfcGhvZW5peDI2MCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfUEhPRU5JWDI2MCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3Bob2VuaXgyNjAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfVVZBQ0FfU1RPUksKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1VWQUNBX1NUT1JLCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX3V2YWNhX3N0b3JrKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9VVkFDQV9TVE9SSykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3V2YWNhX3N0b3JrKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1NNQVJUUTUKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1NNQVJUUTUKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc21hcnRxNSgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfU01BUlRRNSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3NtYXJ0cTUoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQUxMMzA3OAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQUxMMzA3OAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hbGwzMDc4KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9BTEwzMDc4KQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYWxsMzA3OCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9DVEVSQV8yQkFZX0RTCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9DVEVSQV8yQkFZX0RTCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2N0ZXJhXzJiYXlfZHMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0NURVJBXzJCQVlfRFMpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19jdGVyYV8yYmF5X2RzKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX1NJT0dFTlRPTzMKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX1NJT0dFTlRPTzMKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfc2lvZ2VudG9vMygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfU0lPR0VOVE9PMykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX3Npb2dlbnRvbzMoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRVBCNTAwMAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfRVBCNTAwMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19lcGI1MDAwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9FUEI1MDAwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZXBiNTAwMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9IWTkyNjMKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0hZOTI2MworIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19oeTkyNjMoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0hZOTI2MykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2h5OTI2MygpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BQ0VSX1RFTVBPX005MDAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0FDRVJfVEVNUE9fTTkwMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hY2VyX3RlbXBvX205MDAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FDRVJfVEVNUE9fTTkwMCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2FjZXJfdGVtcG9fbTkwMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BQ0VSX1RFTVBPX0RYOTAwCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9BQ0VSX1RFTVBPX0RYOTAwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2FjZXJfdGVtcG9fZHg2NTAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FDRVJfVEVNUE9fRFg5MDApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19hY2VyX3RlbXBvX2R4NjUwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0FDRVJfVEVNUE9fWDk2MAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQUNFUl9URU1QT19YOTYwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2FjZXJfdGVtcG9feDk2MCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQUNFUl9URU1QT19YOTYwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYWNlcl90ZW1wb194OTYwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0FDRVJfRVRFTl9WOTAwCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9BQ0VSX0VURU5fVjkwMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19hY2VyX2V0ZW5fdjkwMCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQUNFUl9FVEVOX1Y5MDApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19hY2VyX2V0ZW5fdjkwMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BQ0VSX0VURU5fWDkwMAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQUNFUl9FVEVOX1g5MDAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYWNlcl9ldGVuX3g5MDAoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0FDRVJfRVRFTl9YOTAwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYWNlcl9ldGVuX3g5MDAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQk9OTkVMTAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQk9OTkVMTAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19ib25uZWxsKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9CT05ORUxMKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYm9ubmVsbCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9PSFRfTVgyNworIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfT0hUX01YMjcKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb2h0X214MjcoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX09IVF9NWDI3KQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfb2h0X214MjcoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfSFRDUVVBUlRaCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9IVENRVUFSVFoKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfaHRjcXVhcnR6KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9IVENRVUFSVFopCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19odGNxdWFydHooKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9ETTY0NjdURVZNCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9EQVZJTkNJX0RNNjQ2N1RFVk0KKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZGF2aW5jaV9kbTY0Njd0ZXZtKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9EQVZJTkNJX0RNNjQ2N1RFVk0pCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19kYXZpbmNpX2RtNjQ2N3Rldm0oKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQzNBWDAzCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9DM0FYMDMKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYzNheDAzKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9DM0FYMDMpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19jM2F4MDMoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTVhUX1RENjAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX01YVF9URDYwCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX214dF90ZDYwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9NWFRfVEQ2MCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX214dF90ZDYwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0VTWVgKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0VTWVgKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZXN5eCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfRVNZWCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2VzeXgoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRE9WRV9EQgorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfRE9WRV9EQgorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19kb3ZlX2RiMigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfRE9WRV9EQikKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2RvdmVfZGIyKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0JVTExET0cKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0JVTExET0cKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYnVsbGRvZygpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQlVMTERPRykKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2J1bGxkb2coKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfREVSRUxMX01FMjAwMAorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfREVSRUxMX01FMjAwMAorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19kZXJlbGxfbWUyMDAwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9ERVJFTExfTUUyMDAwKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfZGVyZWxsX21lMjAwMCgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9CQ01SSU5HX0JBU0UKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0JDTVJJTkdfQkFTRQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19iY21yaW5nX2Jhc2UoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0JDTVJJTkdfQkFTRSkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2JjbXJpbmdfYmFzZSgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9CQ01SSU5HX0VWTQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQkNNUklOR19FVk0KKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ19ldm0oKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0JDTVJJTkdfRVZNKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ19ldm0oKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQkNNUklOR19FVk1fSkFaWgorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQkNNUklOR19FVk1fSkFaWgorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19iY21yaW5nX2V2bV9qYXp6KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9CQ01SSU5HX0VWTV9KQVpaKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ19ldm1famF6eigpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9CQ01SSU5HX1NQCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9CQ01SSU5HX1NQCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2JjbXJpbmdfc3AoKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0JDTVJJTkdfU1ApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19iY21yaW5nX3NwKCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0JDTVJJTkdfU1YKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0JDTVJJTkdfU1YKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ19zdigpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQkNNUklOR19TVikKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2JjbXJpbmdfc3YoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQkNNUklOR19TVl9KQVpaCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9CQ01SSU5HX1NWX0pBWloKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ19zdl9qYXp6KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9CQ01SSU5HX1NWX0pBWlopCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19iY21yaW5nX3N2X2phenooKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQkNNUklOR19UQUJMRVQKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0JDTVJJTkdfVEFCTEVUCisjIGVuZGlmCisjIGRlZmluZSBtYWNoaW5lX2lzX2JjbXJpbmdfdGFibGV0KCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9CQ01SSU5HX1RBQkxFVCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2JjbXJpbmdfdGFibGV0KCkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19NQUNIX0JDTVJJTkdfVlAKKyMgaWZkZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIHVuZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJX19tYWNoaW5lX2FyY2hfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbWFjaGluZV9hcmNoX3R5cGUJTUFDSF9UWVBFX0JDTVJJTkdfVlAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ192cCgpCShtYWNoaW5lX2FyY2hfdHlwZSA9PSBNQUNIX1RZUEVfQkNNUklOR19WUCkKKyNlbHNlCisjIGRlZmluZSBtYWNoaW5lX2lzX2JjbXJpbmdfdnAoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQkNNUklOR19FVk1fU0VJS09SCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9CQ01SSU5HX0VWTV9TRUlLT1IKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ19ldm1fc2Vpa29yKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9CQ01SSU5HX0VWTV9TRUlLT1IpCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19iY21yaW5nX2V2bV9zZWlrb3IoKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQkNNUklOR19TUF9XUVZHQQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQkNNUklOR19TUF9XUVZHQQorIyBlbmRpZgorIyBkZWZpbmUgbWFjaGluZV9pc19iY21yaW5nX3NwX3dxdmdhKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9CQ01SSU5HX1NQX1dRVkdBKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ19zcF93cXZnYSgpCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9CQ01SSU5HX0NVU1RPTQorIyBpZmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgdW5kZWYgbWFjaGluZV9hcmNoX3R5cGUKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlfX21hY2hpbmVfYXJjaF90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBtYWNoaW5lX2FyY2hfdHlwZQlNQUNIX1RZUEVfQkNNUklOR19DVVNUT00KKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ19jdXN0b20oKQkobWFjaGluZV9hcmNoX3R5cGUgPT0gTUFDSF9UWVBFX0JDTVJJTkdfQ1VTVE9NKQorI2Vsc2UKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYmNtcmluZ19jdXN0b20oKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfQUNFUl9TMjAwCisjIGlmZGVmIG1hY2hpbmVfYXJjaF90eXBlCisjICB1bmRlZiBtYWNoaW5lX2FyY2hfdHlwZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCV9fbWFjaGluZV9hcmNoX3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG1hY2hpbmVfYXJjaF90eXBlCU1BQ0hfVFlQRV9BQ0VSX1MyMDAKKyMgZW5kaWYKKyMgZGVmaW5lIG1hY2hpbmVfaXNfYWNlcl9zMjAwKCkJKG1hY2hpbmVfYXJjaF90eXBlID09IE1BQ0hfVFlQRV9BQ0VSX1MyMDApCisjZWxzZQorIyBkZWZpbmUgbWFjaGluZV9pc19hY2VyX3MyMDAoKQkoMCkKKyNlbmRpZgorCiAvKgogICogVGhlc2UgaGF2ZSBub3QgeWV0IGJlZW4gcmVnaXN0ZXJlZAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9kZWxheS5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vZGVsYXkuaAppbmRleCBlYTBiMzY2Li4zYWY2YWQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9kZWxheS5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2RlbGF5LmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqIGZpcnN0IGNvbnN0YW50IG11bHRpcGxpY2F0aW9ucyBnZXRzIG9wdGltaXplZCBhd2F5IGlmIHRoZSBkZWxheSBpcwogICogYSBjb25zdGFudCkKICAqLwotZXh0ZXJuIF9faW5saW5lX18gdm9pZCB1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKK2V4dGVybiBfX2lubGluZV9fIHZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjcykKIHsKIAlfX2RlbGF5KHVzZWNzKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaW50ZXJydXB0LmggYi9pbmNsdWRlL2FzbS1pMzg2L2ludGVycnVwdC5oCmluZGV4IDdmNDA4Y2IuLjNlMjY3NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pbnRlcnJ1cHQuaApAQCAtNDMsMzEgKzQzLDQgQEAKIAogI2RlZmluZSBfX2lzcl9fIHZvaWQgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMCkpKQogCi0jZGVmaW5lIERFQ0xBUkVfSU5URVJSVVBUKHgpIFwKLQlhc20oIi5nbG9ibCBpcnFfIiN4IlxuIiBcCi0JCSAgICAiaXJxXyIjeCI6XG4iIFwKLQkJICAgICJwdXNoYSBcbiIgXAotCQkgICAgInB1c2hsICQiI3giXG4iIFwKLQkJICAgICJwdXNobCAkaXJxX3JldHVyblxuIiBcCi0JCSAgICAiam1wICAgZG9faXJxXG4iKTsgXAotCV9faXNyX18gaXJxXyMjeCh2b2lkKQotCi0jZGVmaW5lIERFQ0xBUkVfRVhDRVBUSU9OKHgsIGYpIFwKLQlhc20oIi5nbG9ibCBleHBfIiN4IlxuIiBcCi0JCSAgICAiZXhwXyIjeCI6XG4iIFwKLQkJICAgICJwdXNoYSBcbiIgXAotCQkgICAgIm1vdmwgICAgICVlc3AsICVlYnhcbiIgXAotCQkgICAgIm1vdmwgICAgICRleGNlcHRpb25fc3RhY2ssICVlYXhcbiIgXAotCQkgICAgIm1vdmwgICAgICVlYXgsICVlc3AgXG4iIFwKLQkJICAgICJwdXNobCAgICAlZWJ4XG4iIFwKLQkJICAgICJtb3ZsICAgICAzMiglZXNwKSwgJWVieFxuIiBcCi0JCSAgICAieG9ybCAgICAgJWVkeCwgJWVkeFxuIiBcCi0JCSAgICAibW92dyAgICAgMzYoJWVzcCksICVkeFxuIiBcCi0JCSAgICAicHVzaGwgICAgJWVkeFxuIiBcCi0JCSAgICAicHVzaGwgICAgJWVieFxuIiBcCi0JCSAgICAicHVzaGwgICAgJCIjeCJcbiIgXAotCQkgICAgInB1c2hsICAgICRleHBfcmV0dXJuXG4iIFwKLQkJICAgICJqbXAgICAgICAiI2YiXG4iKTsgXAotCV9faXNyX18gZXhwXyMjeCh2b2lkKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaCBiL2luY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaAppbmRleCAzOTIxZTAxLi43Yzk5YzhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC1pMzg2LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni91LWJvb3QtaTM4Ni5oCkBAIC0yNCwyNSArMjQsOSBAQAogI2lmbmRlZiBfVV9CT09UX0kzODZfSF8KICNkZWZpbmUgX1VfQk9PVF9JMzg2X0hfCTEKIAotLyogZm9yIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzLCBzZWUgc3RhcnQuUyAqLwotZXh0ZXJuIHVsb25nIGkzODZib290X3N0YXJ0OwkgICAgLyogY29kZSBzdGFydCAoaW4gZmxhc2gpICovCi1leHRlcm4gdWxvbmcgaTM4NmJvb3RfZW5kOwkgICAgLyogY29kZSBlbmQgKGluIGZsYXNoKSAqLwotZXh0ZXJuIHVsb25nIGkzODZib290X3JvbWRhdGFfc3RhcnQ7LyogZGF0YXNlZ21lbnQgaW4gZmxhc2ggKGFsc28gY29kZStyb2RhdGEgZW5kKSAqLwotZXh0ZXJuIHVsb25nIGkzODZib290X3JvbWRhdGFfZGVzdDsgLyogZGF0YSBsb2NhdGlvbiBzZWdtZW50IGluIHJhbSAqLwotZXh0ZXJuIHVsb25nIGkzODZib290X3JvbWRhdGFfc2l6ZTsgLyogc2l6ZSBvZiBkYXRhIHNlZ21lbnQgKi8KLWV4dGVybiB1bG9uZyBpMzg2Ym9vdF9ic3Nfc3RhcnQ7ICAgIC8qIGJzcyBzdGFydCAqLwotZXh0ZXJuIHVsb25nIGkzODZib290X2Jzc19zaXplOyAgICAgLyogYnNzIHNpemUgKi8KLWV4dGVybiB1bG9uZyBpMzg2Ym9vdF9zdGFja19lbmQ7ICAgIC8qIGZpcnN0IHVzYWJsZSBSQU0gYWRkcmVzcyBhZnRlciBic3MgYW5kIHN0YWNrICovCi1leHRlcm4gdWxvbmcgaTM4NmJvb3RfcmFtX2VuZDsgICAgICAvKiBlbmQgb2YgcmFtICovCi0KLWV4dGVybiB1bG9uZyBpMzg2Ym9vdF9yZWFsbW9kZTsgICAgIC8qIHN0YXJ0IG9mIHJlYWxtb2RlIGVudHJ5IGNvZGUgKi8KLWV4dGVybiB1bG9uZyBpMzg2Ym9vdF9yZWFsbW9kZV9zaXplOy8qIHNpemUgb2YgcmVhbG1vZGUgZW50cnkgY29kZSAqLwotZXh0ZXJuIHVsb25nIGkzODZib290X2Jpb3M7ICAgICAgICAgLyogc3RhcnQgb2YgQklPUyBlbXVsYXRpb24gY29kZSAqLwotZXh0ZXJuIHVsb25nIGkzODZib290X2Jpb3Nfc2l6ZTsgICAgLyogc2l6ZSBvZiBCSU9TIGVtdWxhdGlvbiBjb2RlICovCi0KLQogLyogY3B1Ly4uLi9jcHUuYyAqLwotaW50IGNwdV9pbml0KHZvaWQpOworaW50IGNwdV9pbml0X3Iodm9pZCk7CitpbnQgY3B1X2luaXRfZih2b2lkKTsKIAogLyogY3B1Ly4uLi90aW1lci5jICovCiB2b2lkIHRpbWVyX2lzcih2b2lkICopOwpAQCAtNTUsOSArMzksNiBAQAogLyogY3B1Ly4uLi9pbnRlcnJ1cHRzLmMgKi8KIGludCBjcHVfaW5pdF9pbnRlcnJ1cHRzKHZvaWQpOwogCi0vKiBjcHUvLi4uL2V4Y2VwdGlvbnMuYyAqLwotaW50IGNwdV9pbml0X2V4Y2VwdGlvbnModm9pZCk7Ci0KIC8qIGJvYXJkLy4uLi8uLi4gKi8KIGludCBib2FyZF9pbml0KHZvaWQpOwogaW50IGRyYW1faW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy80eHhfcGNpLmggYi9pbmNsdWRlL2FzbS1wcGMvNHh4X3BjaS5oCmluZGV4IDMwMTI1YTEuLmY2ODZlN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy80eHhfcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjLzR4eF9wY2kuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgXzQwNUdQX1BDSV9ICiAjZGVmaW5lIF80MDVHUF9QQ0lfSAogCisjaW5jbHVkZSA8cGNpLmg+CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgNDA1R1AgUENJIGNvcmUgbWVtb3J5IG1hcCBkZWZpbmVzLgogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNDksNCArNTEsMTAgQEAKIAogI2RlZmluZSBQQ0lERVZJRF80MDVHUAkweDAKIAordm9pZCBib2FyZF9wY2lfZml4dXBfaXJxKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgcGNpX2Rldl90IGRldik7CitpbnQgcGNpX2FyYml0ZXJfZW5hYmxlZCh2b2lkKTsKK2ludCBfX3BjaV9wcmVfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOwordm9pZCBfX3BjaV90YXJnZXRfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOwordm9pZCBfX3BjaV9tYXN0ZXJfaW5pdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbW9uLmggYi9pbmNsdWRlL2NvbW1vbi5oCmluZGV4IGY3YzkzYmYuLjc0OWQzNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb21tb24uaApAQCAtMTA3LDYgKzEwNyw5IEBACiAjaWZkZWYgQ09ORklHX0JMQUNLRklOCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU09DX0RBOFhYCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8cGFydC5oPgogI2luY2x1ZGUgPGZsYXNoLmg+CkBAIC00OTUsOCArNDk4LDkgQEAKIHVsb25nCWdldF9PUEJfZnJlcSAodm9pZCk7CiB1bG9uZwlnZXRfUENJX2ZyZXEgKHZvaWQpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkgfHwgZGVmaW5lZChDT05GSUdfUzNDMjQxMCkgfHwgXAotCWRlZmluZWQoQ09ORklHX0xIN0E0MFgpIHx8IGRlZmluZWQoQ09ORklHX1MzQzY0MDApCisjaWYgZGVmaW5lZChDT05GSUdfUzNDMjRYMCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0xIN0E0MFgpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19TM0M2NDAwKQogdWxvbmcJZ2V0X0ZDTEsgKHZvaWQpOwogdWxvbmcJZ2V0X0hDTEsgKHZvaWQpOwogdWxvbmcJZ2V0X1BDTEsgKHZvaWQpOwpAQCAtNjAzLDExICs2MDcsMTQgQEAKIHZvaWQJd2FpdF90aWNrcyAgICAodW5zaWduZWQgbG9uZyk7CiAKIC8qIGxpYl8kKEFSQ0gpL3RpbWUuYyAqLwotdm9pZAl1ZGVsYXkJICAgICAgKHVuc2lnbmVkIGxvbmcpOwordm9pZAlfX3VkZWxheSAgICAgICh1bnNpZ25lZCBsb25nKTsKIHVsb25nCXVzZWMydGlja3MgICAgKHVuc2lnbmVkIGxvbmcgdXNlYyk7CiB1bG9uZwl0aWNrczJ1c2VjICAgICh1bnNpZ25lZCBsb25nIHRpY2tzKTsKIGludAlpbml0X3RpbWViYXNlICh2b2lkKTsKIAorLyogbGliX2dlbmVyaWMvdGltZS5jICovCit2b2lkCXVkZWxheSAgICAgICAgKHVuc2lnbmVkIGxvbmcpOworCiAvKiBsaWJfZ2VuZXJpYy92c3ByaW50Zi5jICovCiB1bG9uZwlzaW1wbGVfc3RydG91bChjb25zdCBjaGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSk7CiAjaWZkZWYgQ09ORklHX1NZU182NEJJVF9WU1BSSU5URgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL0RVNDQwLmggYi9pbmNsdWRlL2NvbmZpZ3MvRFU0NDAuaAppbmRleCBlOWVhMWJmLi42NWRjMjM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvRFU0NDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvRFU0NDAuaApAQCAtNjAsOCArNjAsOSBAQAogI2RlZmluZSBDT05GSUdfU1lTX1BDSV9NRU1CQVNFMQlDT05GSUdfU1lTX1BDSV9NRU1CQVNFICArIDB4MTAwMDAwMDAKICNkZWZpbmUgQ09ORklHX1NZU19QQ0lfTUVNQkFTRTIJQ09ORklHX1NZU19QQ0lfTUVNQkFTRTEgKyAweDEwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfUENJX01FTUJBU0UzCUNPTkZJR19TWVNfUENJX01FTUJBU0UyICsgMHgxMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX1BDSV9JT0JBU0UgICAgICAgICAgMHhlODAwMDAwMAotCisjZGVmaW5lIENPTkZJR19TWVNfUENJX0lPQkFTRQkJMHhlODAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX1BDSV9TVUJTWVNfVkVORE9SSUQJUENJX1ZFTkRPUl9JRF9FU0RHTUJICisjZGVmaW5lIENPTkZJR19TWVNfUENJX1NVQlNZU19JRAkweDA0NDQJCS8qIGRldmljZSBJRCBmb3IgRFU0NDAgKi8KIAogLyogRG9uJ3QgY2hhbmdlIGVpdGhlciBvZiB0aGVzZSAqLwogI2RlZmluZSBDT05GSUdfU1lTX1BFUklQSEVSQUxfQkFTRQkweGVmNjAwMDAwCS8qIGludGVybmFsIHBlcmlwaGVyYWxzCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvUExVNDA1LmggYi9pbmNsdWRlL2NvbmZpZ3MvUExVNDA1LmgKaW5kZXggMmY4NGY3Zi4uNWY1ZjFjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL1BMVTQwNS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9QTFU0MDUuaApAQCAtOTksOCArOTksNiBAQAogCiAjZGVmaW5lIENPTkZJR19TVVBQT1JUX1ZGQVQKIAotI2RlZmluZSBDT05GSUdfQVVUT19VUERBVEUgICAgICAxICAgICAgIC8qIGF1dG91cGRhdGUgdmlhIGNvbXBhY3RmbGFzaCAgKi8KLQogI3VuZGVmCUNPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLwogCiAjZGVmaW5lIENPTkZJR19SVENfTUMxNDY4MTgJCS8qIERTMTY4NSBpcyBNQzE0NjgxOCBjb21wYXRpYmxlKi8KQEAgLTI2NiwxMCArMjY0LDEwIEBACiAgKiBQbGVhc2Ugbm90ZSB0aGF0IENPTkZJR19TWVNfU0RSQU1fQkFTRSBfbXVzdF8gc3RhcnQgYXQgMAogICovCiAjZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAotI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UJCTB4RkZGQTAwMDAKLSNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJVEVYVF9CQVNFCi0jZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JCSgzODQgKiAxMDI0KQkvKiBSZXNlcnZlIDM4NGtCIGZvciBNb25pdG9yICovCi0jZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkJKDM4NCAqIDEwMjQpCS8qIFJlc2VydmUgMzg0a0IgZm9yIG1hbGxvYygpICovCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJQ09ORklHX1NZU19NT05JVE9SX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0JBU0UJCVRFWFRfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfTEVOCQkofihURVhUX0JBU0UpICsgMSkKKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoMTAyNCA8PCAxMCkKIAogLyoKICAqIEVudmlyb25tZW50IFZhcmlhYmxlIHNldHVwCkBAIC00MjgsNCArNDI2LDE0IEBACiAjZGVmaW5lIENPTkZJR19TWVNfVVNCX09IQ0lfU0xPVF9OQU1FCSJvaGNpX3BjaSIKICNkZWZpbmUgQ09ORklHX1VTQl9TVE9SQUdFCTEKIAorLyoKKyAqIFVCSQorICovCisjZGVmaW5lIENPTkZJR19DTURfVUJJCisjZGVmaW5lIENPTkZJR19SQlRSRUUKKyNkZWZpbmUgQ09ORklHX01URF9ERVZJQ0UKKyNkZWZpbmUgQ09ORklHX01URF9QQVJUSVRJT05TCisjZGVmaW5lIENPTkZJR19DTURfTVREUEFSVFMKKyNkZWZpbmUgQ09ORklHX0xaTworCiAjZW5kaWYJLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL1BNQzQ0MC5oIGIvaW5jbHVkZS9jb25maWdzL1BNQzQ0MC5oCmluZGV4IGQ2ZTJmNmIuLjYzMTBjZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9QTUM0NDAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvUE1DNDQwLmgKQEAgLTM1MSw3ICszNTEsNiBAQAogCiAjZGVmaW5lIENPTkZJR19DTURfQlNQCiAjZGVmaW5lIENPTkZJR19DTURfREFURQotI2RlZmluZSBDT05GSUdfQ01EX0FTS0VOVgogI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AKICNkZWZpbmUgQ09ORklHX0NNRF9EVFQKICNkZWZpbmUgQ09ORklHX0NNRF9ESUFHCkBAIC0zNTksNyArMzU4LDYgQEAKICNkZWZpbmUgQ09ORklHX0NNRF9FTEYKICNkZWZpbmUgQ09ORklHX0NNRF9GQVQKICNkZWZpbmUgQ09ORklHX0NNRF9JMkMKLSNkZWZpbmUgQ09ORklHX0NNRF9JUlEKICNkZWZpbmUgQ09ORklHX0NNRF9NSUkKICNkZWZpbmUgQ09ORklHX0NNRF9OQU5ECiAjZGVmaW5lIENPTkZJR19DTURfTkVUCkBAIC00MzUsMTEgKzQzMywxNCBAQAogLyogQm9hcmQtc3BlY2lmaWMgUENJICovCiAjZGVmaW5lIENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUCiAjZGVmaW5lIENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUCisjZGVmaW5lIENPTkZJR19TWVNfUENJX0JPQVJEX0ZJWFVQX0lSUQogCiAvKiBQQ0kgaWRlbnRpZmljYXRpb24gKi8KICNkZWZpbmUgQ09ORklHX1NZU19QQ0lfU1VCU1lTX1ZFTkRPUklEIDB4MTJGRQkvKiBQQ0kgVmVuZG9yIElEOiBlc2QgZ21iaCAgICAgICovCiAjZGVmaW5lIENPTkZJR19TWVNfUENJX1NVQlNZU19JRF9OT05NT05BUkNIIDB4MDQ0MQkvKiBQQ0kgRGV2aWNlIElEOiBOb24tTW9uYXJjaCAqLwogI2RlZmluZSBDT05GSUdfU1lTX1BDSV9TVUJTWVNfSURfTU9OQVJDSCAweDA0NDAJLyogUENJIERldmljZSBJRDogTW9uYXJjaCAqLworLyogZm9yIHdlYWsgX19wY2lfdGFyZ2V0X2luaXQoKSAqLworI2RlZmluZSBDT05GSUdfU1lTX1BDSV9TVUJTWVNfSUQJQ09ORklHX1NZU19QQ0lfU1VCU1lTX0lEX01PTkFSQ0gKICNkZWZpbmUgQ09ORklHX1NZU19QQ0lfQ0xBU1NDT0RFX05PTk1PTkFSQ0gJUENJX0NMQVNTX1BST0NFU1NPUl9QT1dFUlBDCiAjZGVmaW5lIENPTkZJR19TWVNfUENJX0NMQVNTQ09ERV9NT05BUkNICVBDSV9DTEFTU19CUklER0VfSE9TVAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvVkNNQTkuaCBiL2luY2x1ZGUvY29uZmlncy9WQ01BOS5oCmluZGV4IDYxOGI3ZjAuLmViYzgxYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9WQ01BOS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9WQ01BOS5oCkBAIC0zMyw5ICszMywxMCBAQAogICogSGlnaCBMZXZlbCBDb25maWd1cmF0aW9uIE9wdGlvbnMKICAqIChlYXN5IHRvIGNoYW5nZSkKICAqLwotI2RlZmluZSBDT05GSUdfQVJNOTIwVAkJMQkvKiBUaGlzIGlzIGFuIEFSTTkyMFQgQ29yZQkqLwotI2RlZmluZQlDT05GSUdfUzNDMjQxMAkJMQkvKiBpbiBhIFNBTVNVTkcgUzNDMjQxMCBTb0MgICAgICovCi0jZGVmaW5lIENPTkZJR19WQ01BOQkJMQkvKiBvbiBhIE1QTCBWQ01BOSBCb2FyZCAgKi8KKyNkZWZpbmUgQ09ORklHX0FSTTkyMFQJMQkvKiBUaGlzIGlzIGFuIEFSTTkyMFQgQ29yZQkqLworI2RlZmluZSBDT05GSUdfUzNDMjRYMAkxCS8qIGluIGEgU0FNU1VORyBTM0MyNHgwLXR5cGUgU29DCSovCisjZGVmaW5lIENPTkZJR19TM0MyNDEwCTEJLyogc3BlY2lmaWNhbGx5IGEgU0FNU1VORyBTM0MyNDEwIFNvQwkqLworI2RlZmluZSBDT05GSUdfVkNNQTkJMQkvKiBvbiBhIE1QTCBWQ01BOSBCb2FyZCAgKi8KIAogLyogaW5wdXQgY2xvY2sgb2YgUExMICovCiAjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMTIwMDAwMDAvKiBWQ01BOSBoYXMgMTJNSHogaW5wdXQgY2xvY2sJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hMzIwZXZiLmggYi9pbmNsdWRlL2NvbmZpZ3MvYTMyMGV2Yi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzU1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvYTMyMGV2Yi5oCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5IEZhcmFkYXkgVGVjaG5vbG9neQorICogUG8tWXUgQ2h1YW5nIDxyYXRiZXJ0QGZhcmFkYXktdGVjaC5jb20+CisgKgorICogQ29uZmlndWF0aW9uIHNldHRpbmdzIGZvciB0aGUgRmFyYWRheSBBMzIwIGJvYXJkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9hMzIwLmg+CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIENQVSBhbmQgQm9hcmQgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJLyogd2UgZG9uJ3QgbmVlZCBJUlEvRklRIHN0dWZmICovCisKKyN1bmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRpbWVyCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJMTAwMAkvKiB0aW1lciB0aWNrcyBwZXIgc2Vjb25kICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlYWwgVGltZSBDbG9jaworICovCisjZGVmaW5lIENPTkZJR19SVENfRlRSVEMwMTAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisKKy8qIEZUVUFSVCBpcyBhIGhpZ2ggc3BlZWQgTlMgMTZDNTUwQSBjb21wYXRpYmxlIFVBUlQgKi8KKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkJMzg0MDAKKyNkZWZpbmUgQ09ORklHX0NPTlNfSU5ERVgJCTEKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX0NPTTEJCTB4OTgyMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1JFR19TSVpFCS00CisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DTEsJCTE4NDMyMDAwCisKKy8qIHZhbGlkIGJhdWRyYXRlcyAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBVURSQVRFX1RBQkxFCXsgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwIH0KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJuZXQKKyAqLworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCisjZGVmaW5lIENPTkZJR19GVE1BQzEwMAorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJMworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KKyAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisjZGVmaW5lIENPTkZJR19DTURfQ0FDSEUKKyNkZWZpbmUgQ09ORklHX0NNRF9EQVRFCisjZGVmaW5lIENPTkZJR19DTURfUElORworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICovCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCSJBMzIwICMgIgkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCTI1NgkJLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUgKi8KKworLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUJXAorCShDT05GSUdfU1lTX0NCU0laRSArIHNpemVvZihDT05GSUdfU1lTX1BST01QVCkgKyAxNikKKworLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCTE2CisKKy8qIEJvb3QgQXJndW1lbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQlDT05GSUdfU1lTX0NCU0laRQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGFjayBzaXplcworICoKKyAqIFRoZSBzdGFjayBzaXplcyBhcmUgc2V0IHVwIGluIHN0YXJ0LlMgdXNpbmcgdGhlIHNldHRpbmdzIGJlbG93CisgKi8KKyNkZWZpbmUgQ09ORklHX1NUQUNLU0laRQkoMTI4ICogMTAyNCkJLyogcmVndWxhciBzdGFjayAqLworI2lmZGVmIENPTkZJR19VU0VfSVJRCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfSVJRCSg0ICogMTAyNCkJLyogSVJRIHN0YWNrICovCisjZGVmaW5lIENPTkZJR19TVEFDS1NJWkVfRklRCSg0ICogMTAyNCkJLyogRklRIHN0YWNrICovCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCQkoQ09ORklHX0VOVl9TSVpFICsgMTI4ICogMTAyNCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhCisqLworI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNEUkFNIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19TWVNfRlRTRE1DMDIwX1RQMAkoRlRTRE1DMDIwX1RQMF9UUkFTKDIpIHwJXAorCQkJCQkgRlRTRE1DMDIwX1RQMF9UUlAoMSkgIHwJXAorCQkJCQkgRlRTRE1DMDIwX1RQMF9UUkNEKDEpIHwJXAorCQkJCQkgRlRTRE1DMDIwX1RQMF9UUkYoMykgIHwJXAorCQkJCQkgRlRTRE1DMDIwX1RQMF9UV1IoMSkgIHwJXAorCQkJCQkgRlRTRE1DMDIwX1RQMF9UQ0woMikpCisKKyNkZWZpbmUgQ09ORklHX1NZU19GVFNETUMwMjBfVFAxCShGVFNETUMwMjBfVFAxX0lOSV9QUkVDKDQpIHwJXAorCQkJCQkgRlRTRE1DMDIwX1RQMV9JTklfUkVGVCg4KSB8CVwKKwkJCQkJIEZUU0RNQzAyMF9UUDFfUkVGX0lOVFYoMHgxODApKQorCisjZGVmaW5lIENPTkZJR19TWVNfRlRTRE1DMDIwX0JBTkswX0JTUgkoRlRTRE1DMDIwX0JBTktfRU5BQkxFICAgfAlcCisJCQkJCSBGVFNETUMwMjBfQkFOS19ERFdfWDE2ICB8CVwKKwkJCQkJIEZUU0RNQzAyMF9CQU5LX0RTWl8yNTZNIHwJXAorCQkJCQkgRlRTRE1DMDIwX0JBTktfTUJXXzMyICAgfAlcCisJCQkJCSBGVFNETUMwMjBfQkFOS19TSVpFXzY0TSkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUGh5c2ljYWwgTWVtb3J5IE1hcAorICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEJCS8qIHdlIGhhdmUgMSBiYW5rIG9mIERSQU0gKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xCQkweDEwMDAwMDAwCS8qIFNEUkFNIEJhbmsgIzEgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJMHgwNDAwMDAwMAkvKiA2NCBNQiAqLworCisvKgorICogTG9hZCBhZGRyZXNzIGFuZCBtZW1vcnkgdGVzdCBhcmVhIHNob3VsZCBhZ3JlZSB3aXRoCisgKiBib2FyZC9mYXJhZGF5L2EzMjAvY29uZmlnLm1rLiBCZSBjYXJlZnVsIG5vdCB0byBvdmVyd3JpdGUgVS1ib290IGl0c2VsZi4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkJMHgxMjAwMDAwMAorCisvKiBtZW10ZXN0IHdvcmtzIG9uIDYzIE1CIGluIERSQU0gKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MTAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORAkJMHgxM0YwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTdGF0aWMgbWVtb3J5IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgorICovCisKKyNpbmNsdWRlIDxhc20vYXJjaC9mdHNtYzAyMC5oPgorCisjZGVmaW5lIEZUU01DMDIwX0JBTkswX0NPTkZJRwkoRlRTTUMwMjBfQkFOS19FTkFCTEUgICAgICAgICAgICAgfAlcCisJCQkJIEZUU01DMDIwX0JBTktfQkFTRShQSFlTX0ZMQVNIXzEpIHwJXAorCQkJCSBGVFNNQzAyMF9CQU5LX1NJWkVfMU0gICAgICAgICAgICB8CVwKKwkJCQkgRlRTTUMwMjBfQkFOS19NQldfOCkKKworI2RlZmluZSBGVFNNQzAyMF9CQU5LMF9USU1JTkcJKEZUU01DMDIwX1RQUl9SQkUgICAgICB8CVwKKwkJCQkgRlRTTUMwMjBfVFBSX0FTVCgzKSAgIHwJXAorCQkJCSBGVFNNQzAyMF9UUFJfQ1RXKDMpICAgfAlcCisJCQkJIEZUU01DMDIwX1RQUl9BVEkoMHhmKSB8CVwKKwkJCQkgRlRTTUMwMjBfVFBSX0FUMigzKSAgIHwJXAorCQkJCSBGVFNNQzAyMF9UUFJfV1RDKDMpICAgfAlcCisJCQkJIEZUU01DMDIwX1RQUl9BSFQoMykgICB8CVwKKwkJCQkgRlRTTUMwMjBfVFBSX1RSTkEoMHhmKSkKKworI2RlZmluZSBGVFNNQzAyMF9CQU5LMV9DT05GSUcJKEZUU01DMDIwX0JBTktfRU5BQkxFICAgICAgICAgICAgIHwJXAorCQkJCSBGVFNNQzAyMF9CQU5LX0JBU0UoUEhZU19GTEFTSF8yKSB8CVwKKwkJCQkgRlRTTUMwMjBfQkFOS19TSVpFXzMyTSAgICAgICAgICAgfAlcCisJCQkJIEZUU01DMDIwX0JBTktfTUJXXzMyKQorCisjZGVmaW5lIEZUU01DMDIwX0JBTksxX1RJTUlORwkoRlRTTUMwMjBfVFBSX0FTVCgzKSAgIHwJXAorCQkJCSBGVFNNQzAyMF9UUFJfQ1RXKDMpICAgfAlcCisJCQkJIEZUU01DMDIwX1RQUl9BVEkoMHhmKSB8CVwKKwkJCQkgRlRTTUMwMjBfVFBSX0FUMigzKSAgIHwJXAorCQkJCSBGVFNNQzAyMF9UUFJfV1RDKDMpICAgfAlcCisJCQkJIEZUU01DMDIwX1RQUl9BSFQoMykgICB8CVwKKwkJCQkgRlRTTUMwMjBfVFBSX1RSTkEoMHhmKSkKKworI2RlZmluZSBDT05GSUdfU1lTX0ZUU01DMDIwX0NPTkZJR1MJewkJCVwKKwl7IEZUU01DMDIwX0JBTkswX0NPTkZJRywgRlRTTUMwMjBfQkFOSzBfVElNSU5HLCB9LAlcCisJeyBGVFNNQzAyMF9CQU5LMV9DT05GSUcsIEZUU01DMDIwX0JBTksxX1RJTUlORywgfSwJXAorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCisgKi8KKworLyogdXNlIENGSSBmcmFtZXdvcmsgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9DRkkKKyNkZWZpbmUgQ09ORklHX0ZMQVNIX0NGSV9EUklWRVIKKworLyogc3VwcG9ydCBKRURFQyAqLworI2RlZmluZSBDT05GSUdfRkxBU0hfQ0ZJX0xFR0FDWQorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0xFR0FDWV81MTJLeDgKKworI2RlZmluZSBQSFlTX0ZMQVNIXzEJCQkweDAwMDAwMDAwCisjZGVmaW5lIFBIWVNfRkxBU0hfMgkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQlQSFlTX0ZMQVNIXzEKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQU5LU19MSVNUCXsgUEhZU19GTEFTSF8xLCBQSFlTX0ZMQVNIXzIsIH0KKworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJUEhZU19GTEFTSF8xCisKKy8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX0JBTktTCTIKKworLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QJNTEyCisKKyN1bmRlZiBDT05GSUdfU1lTX0ZMQVNIX0VNUFRZX0lORk8KKworLyogZW52aXJvbm1lbnRzICovCisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fRkxBU0gKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSCQkJMHgwMDA2MDAwMAorI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQkweDIwMDAwCisKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvYWxwci5oIGIvaW5jbHVkZS9jb25maWdzL2FscHIuaAppbmRleCBlNjI0OGU5Li45NjQ2MzBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3MvYWxwci5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9hbHByLmgKQEAgLTIzMSwxMyArMjMxLDExIEBACiAgKi8KICNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KIAotI2RlZmluZSBDT05GSUdfQ01EX0FTS0VOVgogI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AKICNkZWZpbmUgQ09ORklHX0NNRF9ESUFHCiAjZGVmaW5lIENPTkZJR19DTURfRUVQUk9NCiAjZGVmaW5lIENPTkZJR19DTURfRlBHQQogI2RlZmluZSBDT05GSUdfQ01EX0kyQwotI2RlZmluZSBDT05GSUdfQ01EX0lSUQogI2RlZmluZSBDT05GSUdfQ01EX01JSQogI2RlZmluZSBDT05GSUdfQ01EX05BTkQKICNkZWZpbmUgQ09ORklHX0NNRF9ORVQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9hcG9sbG9uLmggYi9pbmNsdWRlL2NvbmZpZ3MvYXBvbGxvbi5oCmluZGV4IDU3NWY2MGUuLmRkYWM1ZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9hcG9sbG9uLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2Fwb2xsb24uaApAQCAtNzYsNiArNzYsNyBAQAogICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAgKi8KICNkZWZpbmUJQ09ORklHX0VOVl9TSVpFIFNaXzEyOEsJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9TSVpFX0ZMRVggU1pfMjU2SwogI2RlZmluZQlDT05GSUdfU1lTX01BTExPQ19MRU4JKENPTkZJR19FTlZfU0laRSArIFNaXzFNKQogLyogYnl0ZXMgcmVzZXJ2ZWQgZm9yIGluaXRpYWwgZGF0YSAqLwogI2RlZmluZQlDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4CkBAIC0yNTUsNiArMjU2LDcgQEAKICNkZWZpbmUgQ09ORklHX1NZU19NT05JVE9SX0xFTgkJU1pfMjU2SwkvKiBVLUJvb3QgaW1hZ2Ugc2l6ZSAqLwogI2RlZmluZQlDT05GSUdfRU5WX0lTX0lOX09ORU5BTkQJMQogI2RlZmluZSBDT05GSUdfRU5WX0FERFIJCTB4MDAwMjAwMDAKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSX0ZMRVgJMHgwMDA0MDAwMAogCiAjZGVmaW5lIENPTkZJR19TWVNfNjRCSVRfVlNQUklOVEYJCS8qIG5lZWRlZCBmb3IgbmFuZF91dGlsLmMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2RhODMwZXZtLmggYi9pbmNsdWRlL2NvbmZpZ3MvZGE4MzBldm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGUyY2UxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWdzL2RhODMwZXZtLmgKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYyA8d3d3LnRpLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBkYXZpbmNpX2R2ZXZtLmguIE9yaWdpbmFsIENvcHlyaWdodHMgZm9sbG93OgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTZXJnZXkgS3VidXNoeW4gPGtzaUBrb2k4Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKgorICogQm9hcmQKKyAqLworCisvKgorICogU29DIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfTUFDSF9EQVZJTkNJX0RBODMwX0VWTQorI2RlZmluZSBDT05GSUdfQVJNOTI2RUpTCQkvKiBhcm05MjZlanMgQ1BVIGNvcmUgKi8KKyNkZWZpbmUgQ09ORklHX1NPQ19EQThYWAkJLyogVEkgREE4eHggU29DICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJCWNsa19nZXQoREFWSU5DSV9BUk1fQ0xLSUQpCisjZGVmaW5lIENPTkZJR19TWVNfT1NDSU5fRlJFUQkJMjQwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19USU1FUkJBU0UJCURBVklOQ0lfVElNRVIwX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19IWl9DTE9DSwkJY2xrX2dldChEQVZJTkNJX0FVWENMS19DTEtJRCkKKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJCTEwMDAKKyNkZWZpbmUgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAorI2RlZmluZSBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVAkvKiB0byBhIHByb3BlciBhZGRyZXNzLCBpbml0IGRvbmUgKi8KKworLyoKKyAqIE1lbW9yeSBJbmZvCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQUxMT0NfTEVOCSgweDEwMDAwICsgMSoxMDI0KjEwMjQpIC8qIG1hbGxvYygpIGxlbiAqLworI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUJMTI4IC8qIHJlc2VydmVkIGZvciBpbml0aWFsIGRhdGEgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xCQlEQVZJTkNJX0REUl9FTUlGX0RBVEFfQkFTRSAvKiBERFIgU3RhcnQgKi8KKyNkZWZpbmUgUEhZU19TRFJBTV8xX1NJWkUJKDY0IDw8IDIwKSAvKiBTRFJBTSBzaXplIDY0TUIgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCVBIWVNfU0RSQU1fMSAvKiBtZW10ZXN0IHN0YXJ0IGFkZHIgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX0VORCAJKFBIWVNfU0RSQU1fMSArIDE2KjEwMjQqMTAyNCkgLyogMTZNQiB0ZXN0ICovCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEgLyogd2UgaGF2ZSAxIGJhbmsgb2YgRFJBTSAqLworI2RlZmluZSBDT05GSUdfU1RBQ0tTSVpFCSgyNTYqMTAyNCkgLyogcmVndWxhciBzdGFjayAqLworCisvKgorICogU2VyaWFsIERyaXZlciBpbmZvCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9TRVJJQUwKKyNkZWZpbmUgQ09ORklHX1NZU19OUzE2NTUwX1JFR19TSVpFCS00CS8qIE5TMTY1NTAgcmVnaXN0ZXIgc2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX05TMTY1NTBfQ09NMQlEQVZJTkNJX1VBUlQyX0JBU0UgLyogQmFzZSBhZGRyZXNzIG9mIFVBUlQyICovCisjZGVmaW5lIENPTkZJR19TWVNfTlMxNjU1MF9DTEsJY2xrX2dldChEQVZJTkNJX1VBUlQyX0NMS0lEKQorI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWAkxCQkvKiB1c2UgVUFSVDAgZm9yIGNvbnNvbGUgKi8KKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAJCS8qIERlZmF1bHQgYmF1ZCByYXRlICovCisjZGVmaW5lIENPTkZJR19TWVNfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisvKgorICogSTJDIENvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMKKyNkZWZpbmUgQ09ORklHX0RSSVZFUl9EQVZJTkNJX0kyQworI2RlZmluZSBDT05GSUdfU1lTX0kyQ19TUEVFRAkJMjUwMDAgLyogMTAwS2JwcyB3b24ndCB3b3JrLCBIL1cgYnVnICovCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCQkxMCAvKiBCb2d1cywgbWFzdGVyLW9ubHkgaW4gVS1Cb290ICovCisKKy8qCisgKiBJMkMgRUVQUk9NIGRlZmluaXRpb25zIGZvciBjYXRhbHlzdCAyNFcyNTYgRUVQUk9NIGNoaXAKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUl9MRU4JMgorI2RlZmluZSBDT05GSUdfU1lTX0kyQ19FRVBST01fQUREUgkweDUwCisjZGVmaW5lIENPTkZJR19TWVNfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwk2CisjZGVmaW5lIENPTkZJR19TWVNfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMJMjAKKworLyoKKyAqIE5ldHdvcmsgJiBFdGhlcm5ldCBDb25maWd1cmF0aW9uCisgKi8KKyNpZmRlZiBDT05GSUdfRFJJVkVSX1RJX0VNQUMKKyNkZWZpbmUgQ09ORklHX01JSQorI2RlZmluZSBDT05GSUdfQk9PVFBfREVGQVVMVAorI2RlZmluZSBDT05GSUdfQk9PVFBfRE5TCisjZGVmaW5lIENPTkZJR19CT09UUF9ETlMyCisjZGVmaW5lIENPTkZJR19CT09UUF9TRU5EX0hPU1ROQU1FCisjZGVmaW5lIENPTkZJR19ORVRfUkVUUllfQ09VTlQJMTAKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQorI2VuZGlmCisKKy8qCisgKiBGbGFzaCAmIEVudmlyb25tZW50CisgKi8KKyNpZmRlZiBDT05GSUdfVVNFX05BTkQKKyN1bmRlZiBDT05GSUdfRU5WX0lTX0lOX0ZMQVNICisjZGVmaW5lIENPTkZJR19OQU5EX0RBVklOQ0kKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX05BTkQJCS8qIFUtQm9vdCBlbnYgaW4gTkFORCBGbGFzaCAgKi8KKyNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCTB4MCAvKiBCbG9jayAwLS1ub3QgdXNlZCBieSBib290Y29kZSAqLworI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCQkoMTI4IDw8IDEwKQorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfNEJJVF9IV19FQ0NfT09CRklSU1QKKyNkZWZpbmUgQ09ORklHX1NZU19OQU5EX0NTCQkzCisjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFCQlEQVZJTkNJX0FTWU5DX0VNSUZfREFUQV9DRTNfQkFTRQorI2RlZmluZSBDT05GSUdfU1lTX0NMRV9NQVNLCQkweDEwCisjZGVmaW5lIENPTkZJR19TWVNfQUxFX01BU0sJCTB4OAorI2RlZmluZSBDT05GSUdfU1lTX05BTkRfSFdfRUNDCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX05BTkRfREVWSUNFCTEgLyogTWF4IG51bWJlciBvZiBOQU5EIGRldmljZXMgKi8KKyNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCQkxCisjZGVmaW5lIERFRl9CT09UTQkJCSIiCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfTk9SCisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fRkxBU0gKKyN1bmRlZiBDT05GSUdfU1lTX05PX0ZMQVNICisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQ0ZJX0RSSVZFUgorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0NGSQorI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkxIC8qIG1heCBudW1iZXIgb2YgZmxhc2ggYmFua3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9TRUNUX1NaCSg2NCA8PCAxMCkgLyogNjRLQiAqLworI2RlZmluZSBDT05GSUdfRU5WX09GRlNFVAkJKENPTkZJR19TWVNfRkxBU0hfU0VDVF9TWiozKQorI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX0JBU0UJCURBVklOQ0lfQVNZTkNfRU1JRl9EQVRBX0NFMl9CQVNFCisjZGVmaW5lIFBIWVNfRkxBU0hfU0laRQkJCSgzMiA8PCAyMCkgLyogRmxhc2ggc2l6ZSAzMk1CICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QgKFBIWVNfRkxBU0hfU0laRS9DT05GSUdfU1lTX0ZMQVNIX1NFQ1RfU1opCisjZGVmaW5lIENPTkZJR19FTlZfU0VDVF9TSVpFCQlDT05GSUdfU1lTX0ZMQVNIX1NFQ1RfU1oKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9TUExfQUNDRVNTCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0VfU1BJRkxBU0gKKyN1bmRlZiBDT05GSUdfRU5WX0lTX0lOX0ZMQVNICisjdW5kZWYgQ09ORklHX0VOVl9JU19JTl9OQU5ECisjZGVmaW5lIENPTkZJR19FTlZfSVNfSU5fU1BJX0ZMQVNICisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCSgxNiA8PCAxMCkKKyNkZWZpbmUgQ09ORklHX0VOVl9PRkZTRVQJCSgyNTYgPDwgMTApCisjZGVmaW5lIENPTkZJR19FTlZfU0VDVF9TSVpFCQk0MDk2CisjZGVmaW5lIENPTkZJR19TWVNfTk9fRkxBU0gKKyNkZWZpbmUgQ09ORklHX1NQSQorI2RlZmluZSBDT05GSUdfU1BJX0ZMQVNICisjZGVmaW5lIENPTkZJR19TUElfRkxBU0hfV0lOQk9ORAorI2RlZmluZSBDT05GSUdfREFWSU5DSV9TUEkKKyNkZWZpbmUgQ09ORklHX1NZU19TUElfQkFTRQkJREFWSU5DSV9TUEkwX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19TUElfQ0xLCQljbGtfZ2V0KERBVklOQ0lfU1BJMF9DTEtJRCkKKyNkZWZpbmUgQ09ORklHX1NGX0RFRkFVTFRfU1BFRUQJCTUwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRU5WX1NQSV9NQVhfSFoJQ09ORklHX1NGX0RFRkFVTFRfU1BFRUQKKyNlbmRpZgorCisKKy8qCisgKiBVLUJvb3QgZ2VuZXJhbCBjb25maWd1cmF0aW9uCisgKi8KKyN1bmRlZiBDT05GSUdfVVNFX0lSUQkJCS8qIE5vIElSUS9GSVEgaW4gVS1Cb290ICovCisjdW5kZWYgQ09ORklHX01JU0NfSU5JVF9SCisjdW5kZWYgQ09ORklHX0JPT1RERUxBWQorI2RlZmluZSBDT05GSUdfQk9PVEZJTEUJCSJ1SW1hZ2UiIC8qIEJvb3QgZmlsZSBuYW1lICovCisjZGVmaW5lIENPTkZJR19TWVNfUFJPTVBUCSJEQTgzMC1ldm0gPiAiIC8qIENvbW1hbmQgUHJvbXB0ICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0JTSVpFCTEwMjQgLyogQ29uc29sZSBJL08gQnVmZmVyIFNpemUJKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQlNJWkUJKENPTkZJR19TWVNfQ0JTSVpFK3NpemVvZihDT05GSUdfU1lTX1BST01QVCkrMTYpCisjZGVmaW5lIENPTkZJR19TWVNfTUFYQVJHUwkxNiAvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncyAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCUNPTkZJR19TWVNfQ0JTSVpFIC8qIEJvb3QgQXJncyBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0xPQURfQUREUgkoQ09ORklHX1NZU19NRU1URVNUX1NUQVJUICsgMHg3MDAwMDApCisjZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFCisjZGVmaW5lIENPTkZJR19BVVRPX0NPTVBMRVRFCS8qIFdvbid0IHdvcmsgd2l0aCBodXNoIHNvIGZhciwgbWF5IGJlIGxhdGVyICovCisjZGVmaW5lIENPTkZJR19TWVNfSFVTSF9QQVJTRVIKKyNkZWZpbmUgQ09ORklHX1NZU19QUk9NUFRfSFVTSF9QUzIJIj4gIgorI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCisjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAKKyNkZWZpbmUgQ09ORklHX0NSQzMyX1ZFUklGWQorI2RlZmluZSBDT05GSUdfTVhfQ1lDTElDCisKKy8qCisgKiBMaW51eCBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIExJTlVYX0JPT1RfUEFSQU1fQUREUgkoQ09ORklHX1NZU19NRU1URVNUX1NUQVJUICsgMHgxMDApCisjZGVmaW5lIENPTkZJR19DTURMSU5FX1RBRworI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MKKyNkZWZpbmUgQ09ORklHX0JPT1RBUkdTCQkibWVtPTMyTSBjb25zb2xlPXR0eVMyLDExNTIwMG44IHJvb3Q9L2Rldi9tdGRibG9jay8yIHJ3IG5vaW5pdHJkIGlwPWRoY3AiCisjZGVmaW5lIENPTkZJR19CT09UQ09NTUFORAkiIgorI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTMKKworLyoKKyAqIFUtQm9vdCBjb21tYW5kcworICovCisjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CisjZGVmaW5lIENPTkZJR19DTURfRU5WCisjZGVmaW5lIENPTkZJR19DTURfQVNLRU5WCisjZGVmaW5lIENPTkZJR19DTURfREhDUAorI2RlZmluZSBDT05GSUdfQ01EX0RJQUcKKyNkZWZpbmUgQ09ORklHX0NNRF9NSUkKKyNkZWZpbmUgQ09ORklHX0NNRF9QSU5HCisjZGVmaW5lIENPTkZJR19DTURfU0FWRVMKKyNkZWZpbmUgQ09ORklHX0NNRF9NRU1PUlkKKyN1bmRlZiBDT05GSUdfQ01EX0ZQR0EKKyN1bmRlZiBDT05GSUdfQ01EX1NFVEdFVERDUgorI2RlZmluZSBDT05GSUdfQ01EX0VFUFJPTQorCisjaWZuZGVmIENPTkZJR19EUklWRVJfVElfRU1BQworI3VuZGVmIENPTkZJR19DTURfTkVUCisjdW5kZWYgQ09ORklHX0NNRF9ESENQCisjdW5kZWYgQ09ORklHX0NNRF9NSUkKKyN1bmRlZiBDT05GSUdfQ01EX1BJTkcKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTRV9OQU5ECisjdW5kZWYgQ09ORklHX0NNRF9GTEFTSAorI3VuZGVmIENPTkZJR19DTURfSU1MUworI2RlZmluZSBDT05GSUdfQ01EX05BTkQKKyNkZWZpbmUgQ09ORklHX0NNRF9NVERQQVJUUworI2RlZmluZSBDT05GSUdfTVREX1BBUlRJVElPTlMKKyNkZWZpbmUgQ09ORklHX0NNRF9VQkkKKyNkZWZpbmUgQ09ORklHX1JCVFJFRQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNFX1NQSUZMQVNICisjdW5kZWYgQ09ORklHX0NNRF9JTUxTCisjdW5kZWYgQ09ORklHX0NNRF9GTEFTSAorI2RlZmluZSBDT05GSUdfQ01EX1NQSQorI2RlZmluZSBDT05GSUdfQ01EX1NBVkVFTlYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX1VTRV9OQU5EKSAmJiBcCisJIWRlZmluZWQoQ09ORklHX1VTRV9OT1IpICYmIFwKKwkhZGVmaW5lZChDT05GSUdfVVNFX1NQSUZMQVNIKQorI2RlZmluZSBDT05GSUdfRU5WX0lTX05PV0hFUkUKKyNkZWZpbmUgQ09ORklHX1NZU19OT19GTEFTSAorI2RlZmluZSBDT05GSUdfRU5WX1NJWkUJCSgxNiA8PCAxMCkKKyN1bmRlZiBDT05GSUdfQ01EX0lNTFMKKyN1bmRlZiBDT05GSUdfQ01EX0ZMQVNICisjdW5kZWYgQ09ORklHX0NNRF9FTlYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9EQThYWAorI2RlZmluZSBDT05GSUdfQ01EX1VTQgkJLyogaW5jbHVkZSBzdXBwb3J0IGZvciB1c2IJKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9TVE9SQUdFCS8qIGluY2x1ZGUgc3VwcG9ydCBmb3IgdXNiCSovCisjZGVmaW5lIENPTkZJR19DTURfRkFUCQkvKiBpbmNsdWRlIHN1cHBvcnQgZm9yIEZBVC9zdG9yYWdlKi8KKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04JLyogaW5jbHVkZSBzdXBwb3J0IGZvciBGQVQvc3RvcmFnZSovCisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9kZXZraXQ4MDAwLmggYi9pbmNsdWRlL2NvbmZpZ3MvZGV2a2l0ODAwMC5oCmluZGV4IGJkNTAzN2UuLjEwMTE3NzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9kZXZraXQ4MDAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2RldmtpdDgwMDAuaApAQCAtNjYsNiArNjYsOSBAQAogCiAvKiBIYXJkd2FyZSBkcml2ZXJzICovCiAKKy8qIEREUiAtIEkgdXNlIE1pY3JvbiBERFIgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzX01JQ1JPTl9ERFIJCTEKKwogLyogRE05MDAwICovCiAjZGVmaW5lIENPTkZJR19ORVRfTVVMVEkJCTEKICNkZWZpbmUgQ09ORklHX05FVF9SRVRSWV9DT1VOVAkJMjAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9lTkVULmggYi9pbmNsdWRlL2NvbmZpZ3MvZU5FVC5oCmluZGV4IDI0M2E1NTQuLjZhNjhiZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9lTkVULmgKKysrIGIvaW5jbHVkZS9jb25maWdzL2VORVQuaApAQCAtMjgsNiArMjgsOCBAQAogI2lmbmRlZiBfX0NPTkZJR19ICiAjZGVmaW5lIF9fQ09ORklHX0gKIAorI2RlZmluZSBDT05GSUdfUkVMT0NfRklYVVBfV09SS1MKKwogLyoKICAqIFN0dWZmIHN0aWxsIHRvIGJlIGRlYWx0IHdpdGggLQogICovCkBAIC02MSw3ICs2Myw3IEBACiAvKgogICogU2l6ZSBvZiBtYWxsb2MoKSBwb29sCiAgKi8KLSNkZWZpbmUgQ09ORklHX01BTExPQ19TSVpFCShDT05GSUdfU1lTX0VOVl9TSVpFICsgMTI4KjEwMjQpCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkoQ09ORklHX0VOVl9TSVpFICsgMTI4KjEwMjQpCiAKICNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCiAKQEAgLTIzNCw4ICsyMzYsOCBAQAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiBleHRlcm4gdW5zaWduZWQgbG9uZyBpcDsKIAotI2RlZmluZSBQUklOVElQCQkJCWFzbSAoImNhbGwgbmV4dF9saW5lXG4iIFwKLQkJCQkJICAgICJuZXh0X2xpbmU6XG4iIFwKKyNkZWZpbmUgUFJJTlRJUAkJCQlhc20gKCJjYWxsIDBcbiIgXAorCQkJCQkgICAgIjA6XG4iIFwKIAkJCQkJICAgICJwb3AgJSVlYXhcbiIgXAogCQkJCQkgICAgIm1vdmwgJSVlYXgsICUwXG4iIFwKIAkJCQkJICAgIDoiPXIiKGlwKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvaW14MjdsaXRlLmggYi9pbmNsdWRlL2NvbmZpZ3MvaW14MjdsaXRlLmgKaW5kZXggOGViYjBiYi4uZTIxOWNjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2lteDI3bGl0ZS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9pbXgyN2xpdGUuaApAQCAtMTU2LDYgKzE1Niw3IEBACiAjZGVmaW5lIENPTkZJR19TWVNfTkFORF9CQVNFCQkweGQ4MDAwMDAwCiAjZGVmaW5lIENPTkZJR19KRkZTMl9OQU5ECiAjZGVmaW5lIENPTkZJR19NWENfTkFORF9IV0VDQworI2RlZmluZSBDT05GSUdfU1lTXzY0QklUX1ZTUFJJTlRGCS8qIG5lZWRlZCBmb3IgbmFuZF91dGlsLmMgKi8KIAogLyoKICAqIFNEL01NQwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2lwZWswMS5oIGIvaW5jbHVkZS9jb25maWdzL2lwZWswMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MDI4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvaXBlazAxLmgKQEAgLTAsMCArMSw0MDggQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIE1pY3JvU3lzIEdtYkgKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDkKKyAqIFdvbGZnYW5nIEdyYW5kZWdnZXIsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdnQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0NPTkZJR19ICisjZGVmaW5lIF9fQ09ORklHX0gKKworLyoKKyAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCisgKi8KKworI2RlZmluZSBDT05GSUdfTVBDNTIwMAorI2RlZmluZSBDT05GSUdfTVBDNXh4eAkJMQkvKiBUaGlzIGlzIGFuIE1QQzV4eHggQ1BVICovCisjZGVmaW5lIENPTkZJR19NUFg1MjAwCQkxCS8qIC4uLiBvbiBNUFg1MjAwIGJvYXJkICovCisjZGVmaW5lIENPTkZJR19NUEM1MjAwX0REUgkxCS8qIC4uLiB1c2UgRERSIFJBTSAqLworI2RlZmluZSBDT05GSUdfSVBFSzAxICAgICAgICAgICAJLyogTW90aGVyYm9hcmQgaXMgaXBlazAxICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19NUEM1WFhYX0NMS0lOCTMzMDAwMDAwIC8qIC4uLiBydW5uaW5nIGF0IDMzTUh6ICovCisKKyNkZWZpbmUgQ09ORklHX01JU0NfSU5JVF9SCisKKyNkZWZpbmUgQk9PVEZMQUdfQ09MRAkJMHgwMQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSCAgKi8KKyNkZWZpbmUgQk9PVEZMQUdfV0FSTQkJMHgwMgkvKiBTb2Z0d2FyZSByZWJvb3QgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX0NBQ0hFTElORV9TSVpFCTMyIC8qIEZvciBNUEM1eHh4IENQVXMgKi8KKyNpZmRlZiBDT05GSUdfQ01EX0tHREIKKyNkZWZpbmUgQ09ORklHX1NZU19DQUNIRUxJTkVfU0hJRlQJNSAgLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUgKi8KKyNlbmRpZgorCisvKgorICogU2VyaWFsIGNvbnNvbGUgY29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENPTkZJR19QU0NfQ09OU09MRQkxCS8qIGNvbnNvbGUgaXMgb24gUFNDMSAqLworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAkvKiAuLi4gYXQgOTYwMCBicHMgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19CQVVEUkFURV9UQUJMRSB7IDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCwgMjMwNDAwIH0KKworI2RlZmluZSBDT05GSUdfQ01ETElORV9FRElUSU5HCTEJLyogYWRkIGNvbW1hbmQgbGluZSBoaXN0b3J5ICovCisKKy8qCisgKiBWaWRlbyBjb25maWd1cmF0aW9uIGZvciBMSU1FIEdEQworICovCisjZGVmaW5lIENPTkZJR19WSURFTworI2lmZGVmIENPTkZJR19WSURFTworI2RlZmluZSBDT05GSUdfVklERU9fTUI4NjJ4eAorI2RlZmluZSBDT05GSUdfVklERU9fTUI4NjJ4eF9BQ0NFTAorI2RlZmluZSBWSURFT19GQl8xNkJQUF9XT1JEX1NXQVAKKyNkZWZpbmUgQ09ORklHX0NGQl9DT05TT0xFCisjZGVmaW5lIENPTkZJR19WSURFT19MT0dPCisjZGVmaW5lIENPTkZJR19WSURFT19CTVBfTE9HTworI2RlZmluZSBDT05GSUdfQ09OU09MRV9FWFRSQV9JTkZPCisjZGVmaW5lIENPTkZJR19WR0FfQVNfU0lOR0xFX0RFVklDRQorI2RlZmluZSBDT05GSUdfU1lTX0NPTlNPTEVfSVNfSU5fRU5WCisjZGVmaW5lIENPTkZJR19WSURFT19TV19DVVJTT1IKKyNkZWZpbmUgQ09ORklHX1NQTEFTSF9TQ1JFRU4KKyNkZWZpbmUgQ09ORklHX1ZJREVPX0JNUF9HWklQCisjZGVmaW5lIENPTkZJR19TWVNfVklERU9fTE9HT19NQVhfU0laRQkoMiA8PCAyMCkJLyogZGVjb21wcmVzc2VkIGltZyAqLworLyogTGltZSBjbG9jayBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQjg2Mnh4X0NDRgkweDkwMDAwCS8qIGdlbyAxNjZNSHogb3RoZXIgMTMzTUh6ICovCisvKiBTRFJBTSBwYXJhbWV0ZXIgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQjg2Mnh4X01NUgkweDQxYzc2N2UzCisjZW5kaWYKKworLyoKKyAqIFBDSSBNYXBwaW5nOgorICogMHg0MDAwMDAwMCAtIDB4NGZmZmZmZmYgLSBQQ0kgTWVtb3J5CisgKiAweDUwMDAwMDAwIC0gMHg1MGZmZmZmZiAtIFBDSSBJTyBTcGFjZQorICovCisjZGVmaW5lIENPTkZJR19QQ0kJCTEKKyNkZWZpbmUgQ09ORklHX1BDSV9QTlAJCTEKKyNkZWZpbmUgQ09ORklHX1BDSV9TQ0FOX1NIT1cJMQorCisjZGVmaW5lIENPTkZJR19QQ0lfTUVNX0JVUwkweDQwMDAwMDAwCisjZGVmaW5lIENPTkZJR19QQ0lfTUVNX1BIWVMJQ09ORklHX1BDSV9NRU1fQlVTCisjZGVmaW5lIENPTkZJR19QQ0lfTUVNX1NJWkUJMHgxMDAwMDAwMAorCisjZGVmaW5lIENPTkZJR19QQ0lfSU9fQlVTCTB4NTAwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1BDSV9JT19QSFlTCUNPTkZJR19QQ0lfSU9fQlVTCisjZGVmaW5lIENPTkZJR19QQ0lfSU9fU0laRQkweDAxMDAwMDAwCisKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQkxCisjZGVmaW5lIENPTkZJR19NSUkJCTEKKyNkZWZpbmUgQ09ORklHX0VFUFJPMTAwCQkxCisjZGVmaW5lIENPTkZJR19TWVNfUlhfRVRIX0JVRkZFUgk4ICAvKiB1c2UgOCByeCBidWZmZXIgb24gZWVwcm8xMDAgICovCisKKy8qIFBhcnRpdGlvbnMgKi8KKyNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04KKworLyogVVNCICovCisjZGVmaW5lIENPTkZJR19VU0JfT0hDSV9ORVcKKyNkZWZpbmUgQ09ORklHX1NZU19PSENJX0JFX0NPTlRST0xMRVIKKyNkZWZpbmUgQ09ORklHX1VTQl9TVE9SQUdFCisKKyNkZWZpbmUgQ09ORklHX1NZU19VU0JfT0hDSV9DUFVfSU5JVAorI2RlZmluZSBDT05GSUdfU1lTX1VTQl9PSENJX1JFR1NfQkFTRQkJTVBDNVhYWF9VU0IKKyNkZWZpbmUgQ09ORklHX1NZU19VU0JfT0hDSV9TTE9UX05BTUUJCSJtcGM1MjAwIgorI2RlZmluZSBDT05GSUdfU1lTX1VTQl9PSENJX01BWF9ST09UX1BPUlRTCTE1CisKKy8qCisgKiBDb21tYW5kIGxpbmUgY29uZmlndXJhdGlvbi4KKyAqLworI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgorCisjaWZkZWYgQ09ORklHX1ZJREVPCisjZGVmaW5lIENPTkZJR19DTURfQk1QCQkvKiBCTVAgc3VwcG9ydCAqLworI2VuZGlmCisjZGVmaW5lIENPTkZJR19DTURfREFURQkJLyogc3VwcG9ydCBmb3IgUlRDLCBkYXRlL3RpbWUuLi4qLworI2RlZmluZSBDT05GSUdfQ01EX0RIQ1AJCS8qIERIQ1AgU3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfQ01EX0ZBVAkJLyogRkFUIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9JMkMJCS8qIEkyQyBzZXJpYWwgYnVzIHN1cHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0NNRF9JREUJCS8qIElERSBoYXJkZGlzayBzdXBwb3J0ICovCisjZGVmaW5lIENPTkZJR19DTURfSVJRCQkvKiBpcnFpbmZvICovCisjZGVmaW5lIENPTkZJR19DTURfTUlJCQkvKiBNSUkgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfQ01EX1BDSQkJLyogcGNpaW5mbyAqLworI2RlZmluZSBDT05GSUdfQ01EX1VTQgkJLyogVVNCIFN1cHBvcnQgKi8KKworI2RlZmluZSBDT05GSUdfU1lTX0xPV0JPT1QJMQorCisvKgorICogQXV0b2Jvb3RpbmcKKyAqLworI2RlZmluZSBDT05GSUdfQk9PVERFTEFZCTUJLyogYXV0b2Jvb3QgYWZ0ZXIgNSBzZWNvbmRzICovCisKKyNkZWZpbmUgQ09ORklHX1BSRUJPT1QJImVjaG87IglcCisJImVjaG8gVHlwZSBcXFwicnVuIGZsYXNoX25mc1xcXCIgdG8gbW91bnQgcm9vdCBmaWxlc3lzdGVtIG92ZXIgTkZTOyIgXAorCSJlY2hvIgorCisjdW5kZWYJQ09ORklHX0JPT1RBUkdTCisKKyNkZWZpbmUJQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUwkJCQkJXAorCSJuZXRkZXY9ZXRoMFwwIgkJCQkJCQlcCisJImNvbnNvbGVkZXY9dHR5UFNDMFwwIgkJCQkJCVwKKwkiaG9zdG5hbWU9aXBlazAxXDAiCQkJCQkJXAorCSJuZnNhcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvbmZzIHJ3ICIJCQlcCisJCSJuZnNyb290PSR7c2VydmVyaXB9OiR7cm9vdHBhdGh9XDAiCQkJXAorCSJyYW1hcmdzPXNldGVudiBib290YXJncyByb290PS9kZXYvcmFtIHJ3XDAiCQkJXAorCSJhZGRpcD1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJpcD0ke2lwYWRkcn06JHtzZXJ2ZXJpcH06JHtnYXRld2F5aXB9OiR7bmV0bWFza30iCVwKKwkJIjoke2hvc3RuYW1lfToke25ldGRldn06b2ZmIHBhbmljPTFcMCIJCQlcCisJImFkZHR0eT1zZXRlbnYgYm9vdGFyZ3MgJHtib290YXJnc30gIgkJCQlcCisJCSJjb25zb2xlPSR7Y29uc29sZWRldn0sJHtiYXVkcmF0ZX1cMCIJCQlcCisJImZsYXNoX25mcz1ydW4gbmZzYXJncyBhZGRpcCBhZGR0dHk7IgkJCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfSAtICR7ZmR0YWRkcn1cMCIJCQlcCisJImZsYXNoX3NlbGY9cnVuIHJhbWFyZ3MgYWRkaXAgYWRkdHR5OyIJCQkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn0gJHtyYW1kaXNrX2FkZHJ9ICR7ZmR0YWRkcn1cMCIJXAorCSJuZXRfbmZzPXRmdHAgMjAwMDAwICR7Ym9vdGZpbGV9OyB0ZnRwICR7ZmR0YWRkcn0gJHtmZHRmaWxlfTsiICBcCisJCSJydW4gbmZzYXJncyBhZGRpcCBhZGR0dHk7IiAgICAJCQkJXAorCQkgImJvb3RtICR7bG9hZGFkZHJ9IC0gJHtmZHRhZGRyfVwwIgkJCVwKKwkicm9vdHBhdGg9L29wdC9lbGRrL3BwY182eHhcMCIJCQkJCVwKKwkiYm9vdGZpbGU9aXBlazAxL3VJbWFnZVwwIgkJCQkJXAorCSJsb2FkPXRmdHAgMTAwMDAwIGlwZWswMS91LWJvb3QuYmluXDAiCQkJCVwKKwkidXBkYXRlPXByb3RlY3Qgb2ZmIEZDMDAwMDAwICs2MDAwMDsgZXJhIEZDMDAwMDAwICs2MDAwMDsgIglcCisJCSJjcC5iIDEwMDAwMCBGQzAwMDAwMCAke2ZpbGVzaXplfVwwIiAgIAkJCVwKKwkidXBkPXJ1biBsb2FkO3J1biB1cGRhdGVcMCIJCQkJCVwKKwkiZmR0YWRkcj04MDAwMDBcMCIJCQkJCQlcCisJImxvYWRhZGRyPTQwMDAwMFwwIgkJCQkJCVwKKwkiZmR0ZmlsZT1pcGVrMDEvaXBlazAxLmR0YlwwIgkJCQkJXAorCSIiCisKKyNkZWZpbmUgQ09ORklHX0JPT1RDT01NQU5ECSJydW4gZmxhc2hfc2VsZiIKKworLyoKKyAqIElQQiBCdXMgY2xvY2tpbmcgY29uZmlndXJhdGlvbi4KKyAqLworI2RlZmluZSBDT05GSUdfU1lTX0lQQkNMS19FUVVBTFNfWExCQ0xLIAkvKiBmb3IgMTMzTUh6ICovCisvKiBQQ0kgY2xvY2sgbXVzdCBiZSAzMywgYmVjYXVzZSBib2FyZCB3aWxsIG5vdCBib290ICovCisjdW5kZWYgQ09ORklHX1NZU19QQ0lDTEtfRVFVQUxTX0lQQkNMS19ESVYyCS8qIGZvciA2Nk1IeiAqLworCisvKgorICogT3BlbiBmaXJtd2FyZSBmbGF0IHRyZWUgc3VwcG9ydAorICovCisjZGVmaW5lIENPTkZJR19PRl9MSUJGRFQJMQorI2RlZmluZSBDT05GSUdfT0ZfQk9BUkRfU0VUVVAJMQorCisjZGVmaW5lIE9GX0NQVQkJCSJQb3dlclBDLDUyMDBAMCIKKyNkZWZpbmUgT0ZfU09DCQkJInNvYzUyMDBAZjAwMDAwMDAiCisjZGVmaW5lIE9GX1RCQ0xLCQkoYmQtPmJpX2J1c2ZyZXEgLyA0KQorCisvKgorICogSTJDIGNvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCTEJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydCAqLworI2RlZmluZSBDT05GSUdfU1lTX0kyQ19NT0RVTEUJMgkvKiBTZWxlY3QgSTJDIG1vZHVsZSAjMSBvciAjMiAqLworCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NQRUVECTEwMDAwMAkvKiAxMDAga0h6ICovCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1NMQVZFCTB4N0YKKworLyoKKyAqIEVFUFJPTSBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFIJCTB4NTMKKyNkZWZpbmUgQ09ORklHX1NZU19JMkNfRUVQUk9NX0FERFJfTEVOCQkyCisjZGVmaW5lIENPTkZJR19TWVNfRUVQUk9NX1BBR0VfV1JJVEVfQklUUwk2CisjZGVmaW5lIENPTkZJR19TWVNfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMJMTAKKworLyoKKyAqIFJUQyBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1JUQ19QQ0Y4NTYzCisjZGVmaW5lIENPTkZJR19TWVNfSTJDX1JUQ19BRERSCQkweDUxCisKKyNkZWZpbmUgQ09ORklHX1NZU19GTEFTSF9CQVNFCQkweEZDMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfU0laRQkJMHgwMTAwMDAwMAorI2RlZmluZSBDT05GSUdfRU5WX0FERFIJCQkoQ09ORklHX1NZU19GTEFTSF9CQVNFICsgXAorCQkJCQkgQ09ORklHX1NZU19NT05JVE9SX0xFTikKKworI2RlZmluZSBDT05GSUdfU1lTX01BWF9GTEFTSF9CQU5LUwkxICAgIC8qIG1heCBudW0gb2YgbWVtb3J5IGJhbmtzICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFYX0ZMQVNIX1NFQ1QJMjU2ICAvKiBtYXggbnVtIG9mIHNlY3RzIG9uIG9uZSBjaGlwICovCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfUFJPVEVDVElPTiAgLyogIlJlYWwiIChoYXJkd2FyZSkgc2VjdG9ycyBwcm90ZWN0aW9uICovCisKKy8qIHVzZSBDRkkgZmxhc2ggZHJpdmVyICovCisjZGVmaW5lIENPTkZJR19GTEFTSF9DRklfRFJJVkVSCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQ0ZJCisjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfRU1QVFlfSU5GTworI2RlZmluZSBDT05GSUdfU1lTX0ZMQVNIX1VTRV9CVUZGRVJfV1JJVEUgMQorCisvKgorICogRW52aXJvbm1lbnQgc2V0dGluZ3MKKyAqLworI2RlZmluZSBDT05GSUdfRU5WX0lTX0lOX0ZMQVNICQkxCisjZGVmaW5lIENPTkZJR19FTlZfU0laRQkJCTB4MTAwMDAKKyNkZWZpbmUgQ09ORklHX0VOVl9TRUNUX1NJWkUJCTB4MjAwMDAKKyNkZWZpbmUgQ09ORklHX0VOVl9PVkVSV1JJVEUJCTEKKyNkZWZpbmUgQ09ORklHX0VOVl9BRERSX1JFRFVORAkJKENPTkZJR19FTlZfQUREUiArIENPTkZJR19FTlZfU0VDVF9TSVpFKQorI2RlZmluZSBDT05GSUdfRU5WX1NJWkVfUkVEVU5ECQlDT05GSUdfRU5WX1NJWkUKKworLyoKKyAqIE1lbW9yeSBtYXAKKyAqLworI2RlZmluZSBDT05GSUdfU1lTX01CQVIJCQkweGYwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0RFRkFVTFRfTUJBUgkJMHg4MDAwMDAwMAorI2RlZmluZQlDT05GSUdfU1lTX1NSQU1fQkFTRQkJMHhGMTAwMDAwMAorI2RlZmluZQlDT05GSUdfU1lTX1NSQU1fU0laRQkJMHgwMDIwMDAwMAorI2RlZmluZQlDT05GSUdfU1lTX0xJTUVfQkFTRQkJMHhFNDAwMDAwMAorI2RlZmluZQlDT05GSUdfU1lTX0xJTUVfU0laRQkJMHgwNDAwMDAwMAorI2RlZmluZQlDT05GSUdfU1lTX0ZQR0FfQkFTRQkJMHhDMDAwMDAwMAorI2RlZmluZQlDT05GSUdfU1lTX0ZQR0FfU0laRQkJMHgxMDAwMDAwMAorI2RlZmluZQlDT05GSUdfU1lTX01QRUdfQkFTRQkJMHhlMjAwMDAwMAorI2RlZmluZQlDT05GSUdfU1lTX01QRUdfU0laRQkJMHgwMTAwMDAwMAorI2RlZmluZSBDT05GSUdfU1lTX0NGX0JBU0UJCTB4ZTEwMDAwMDAKKyNkZWZpbmUgQ09ORklHX1NZU19DRl9TSVpFCQkweDAxMDAwMDAwCisKKy8qIFVzZSBTUkFNIHVudGlsIFJBTSB3aWxsIGJlIGF2YWlsYWJsZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0lOSVRfUkFNX0FERFIJTVBDNVhYWF9TUkFNCisvKiBFbmQgb2YgdXNlZCBhcmVhIGluIERQUkFNICovCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9SQU1fRU5ECQlNUEM1WFhYX1NSQU1fU0laRQorCisKKworLyogc2l6ZSBpbiBieXRlcyByZXNlcnZlZCBmb3IgaW5pdGlhbCBkYXRhICovCisjZGVmaW5lIENPTkZJR19TWVNfR0JMX0RBVEFfU0laRQkxMjgKKworI2RlZmluZSBDT05GSUdfU1lTX0dCTF9EQVRBX09GRlNFVAkoQ09ORklHX1NZU19JTklUX1JBTV9FTkQgLSBcCisJCQkJCSBDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lIENPTkZJR19TWVNfSU5JVF9TUF9PRkZTRVQJQ09ORklHX1NZU19HQkxfREFUQV9PRkZTRVQKKworI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkJVEVYVF9CQVNFCisjaWYgKENPTkZJR19TWVNfTU9OSVRPUl9CQVNFIDwgQ09ORklHX1NZU19GTEFTSF9CQVNFKQorIyAgIGRlZmluZSBDT05GSUdfU1lTX1JBTUJPT1QJCTEKKyNlbmRpZgorCisjZGVmaW5lIENPTkZJR19TWVNfTU9OSVRPUl9MRU4JKDM4NCA8PCAxMCkgIC8qIFJlc2VydmUgMzg0IGtCIGZvciBNb25pdG9yICovCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkoNCA8PCAyMCkgICAgLyogUmVzZXJ2ZSAxMjgga0IgZm9yIG1hbGxvYygpICovCisjZGVmaW5lIENPTkZJR19TWVNfQk9PVE1BUFNaCSg4IDw8IDIwKSAgICAvKiBJbml0aWFsIE1lbW9yeSBtYXAgZm9yIExpbnV4ICovCisKKy8qCisgKiBFdGhlcm5ldCBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX01QQzV4eHhfRkVDCQkxCisjZGVmaW5lIENPTkZJR19NUEM1eHh4X0ZFQ19NSUkxMDAKKyNkZWZpbmUgQ09ORklHX1BIWV9BRERSCQkJMHgwMAorCisvKgorICogR1BJTyBjb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19HUFNfUE9SVF9DT05GSUcJMHgxZDU1NjYyNAorCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lIENPTkZJR19TWVNfTE9OR0hFTFAJCQkvKiB1bmRlZiB0byBzYXZlIG1lbW9yeQkqLworI2RlZmluZSBDT05GSUdfU1lTX1BST01QVAkJIj0+ICIJLyogTW9uaXRvciBDb21tYW5kIFByb21wdCAqLworI2lmZGVmIENPTkZJR19DTURfS0dEQgorI2RlZmluZSBDT05GSUdfU1lTX0NCU0laRQkJMTAyNAkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2Vsc2UKKyNkZWZpbmUgQ09ORklHX1NZU19DQlNJWkUJCTI1NgkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAqLworI2VuZGlmCisvKiBQcmludCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX1BCU0laRQkJKENPTkZJR19TWVNfQ0JTSVpFICsgXAorCQkJCQkgc2l6ZW9mKENPTkZJR19TWVNfUFJPTVBUKSArIDE2KQorLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQVhBUkdTCQkxNgorLyogQm9vdCBBcmd1bWVudCBCdWZmZXIgU2l6ZSAqLworI2RlZmluZSBDT05GSUdfU1lTX0JBUkdTSVpFCQlDT05GSUdfU1lTX0NCU0laRQorCisKKyNkZWZpbmUgQ09ORklHX1NZU19NRU1URVNUX1NUQVJUCTB4MDAxMDAwMDAJLyogbWVtdGVzdCB3b3JrcyBvbiAqLworI2RlZmluZSBDT05GSUdfU1lTX01FTVRFU1RfRU5ECQkweDAwZjAwMDAwCS8qIDEuLi4xNSBNQiBpbiBEUkFNICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19MT0FEX0FERFIJCTB4MTAwMDAwIC8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19IWgkJCTEwMDAgLyogZGVjcmVtZW50ZXIgZnJlcTogMSBtcyB0aWNrcyAqLworI2RlZmluZSBDT05GSUdfTE9PUFcKKworLyoKKyAqIFZhcmlvdXMgbG93LWxldmVsIHNldHRpbmdzCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NUEM1MjAwKQorI2RlZmluZSBDT05GSUdfU1lTX0hJRDBfSU5JVAkJSElEMF9JQ0UgfCBISUQwX0lDRkkKKyNkZWZpbmUgQ09ORklHX1NZU19ISUQwX0ZJTkFMCQlISUQwX0lDRQorI2Vsc2UKKyNkZWZpbmUgQ09ORklHX1NZU19ISUQwX0lOSVQJCTAKKyNkZWZpbmUgQ09ORklHX1NZU19ISUQwX0ZJTkFMCQkwCisjZW5kaWYKKworI2RlZmluZSBDT05GSUdfU1lTX0JPT1RDU19TVEFSVAkJQ09ORklHX1NZU19GTEFTSF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfQk9PVENTX1NJWkUJCUNPTkZJR19TWVNfRkxBU0hfU0laRQorI2RlZmluZSBDT05GSUdfU1lTX0NTMF9TVEFSVAkJQ09ORklHX1NZU19GTEFTSF9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfQ1MwX1NJWkUJCUNPTkZJR19TWVNfRkxBU0hfU0laRQorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9TVEFSVAkJQ09ORklHX1NZU19TUkFNX0JBU0UKKyNkZWZpbmUgQ09ORklHX1NZU19DUzFfU0laRQkJQ09ORklHX1NZU19TUkFNX1NJWkUKKyNkZWZpbmUgQ09ORklHX1NZU19DUzNfU1RBUlQJCUNPTkZJR19TWVNfTElNRV9CQVNFCisjZGVmaW5lIENPTkZJR19TWVNfQ1MzX1NJWkUJCUNPTkZJR19TWVNfTElNRV9TSVpFCisjZGVmaW5lCUNPTkZJR19TWVNfQ1M2X1NUQVJUCQlDT05GSUdfU1lTX0ZQR0FfQkFTRQorI2RlZmluZQlDT05GSUdfU1lTX0NTNl9TSVpFCQlDT05GSUdfU1lTX0ZQR0FfU0laRQorI2RlZmluZQlDT05GSUdfU1lTX0NTNV9TVEFSVAkJQ09ORklHX1NZU19DRl9CQVNFCisjZGVmaW5lCUNPTkZJR19TWVNfQ1M1X1NJWkUJCUNPTkZJR19TWVNfQ0ZfU0laRQorI2RlZmluZQlDT05GSUdfU1lTX0NTN19TVEFSVAkJQ09ORklHX1NZU19NUEVHX0JBU0UKKyNkZWZpbmUJQ09ORklHX1NZU19DUzdfU0laRQkJQ09ORklHX1NZU19NUEVHX1NJWkUKKworI2lmZGVmIENPTkZJR19TWVNfUENJU1BFRURfNjYKKyNkZWZpbmUgQ09ORklHX1NZU19CT09UQ1NfQ0ZHCQkweDAwMDZGOTAwCisjZGVmaW5lIENPTkZJR19TWVNfQ1MxX0NGRwkJMHgwMDA0RkIwMAorI2RlZmluZSBDT05GSUdfU1lTX0NTMl9DRkcJCTB4MDAwNkY5MDAKKyNlbHNlCisjZGVmaW5lIENPTkZJR19TWVNfQk9PVENTX0NGRwkJMHgwMDAyRjkwMAorI2RlZmluZSBDT05GSUdfU1lTX0NTMV9DRkcJCTB4MDAwMUZCMDAKKyNkZWZpbmUgQ09ORklHX1NZU19DUzJfQ0ZHCQkweDAwMDJGOTBDCisjZW5kaWYKKworLyoKKyAqIEFjayBhY3RpdmUsIE11eGVkIG1vZGUsIEFTPTI0IGJpdCBhZGRyZXNzLCBEUz0zMiBiaXQgZGF0YSwgMAorICogd2FpdHN0YXRlcywgd3JpdGVzd2FwIGFuZCByZWFkc3dhcCBlbmFibGVkCisgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19DUzNfQ0ZHCQkweDAwRkZGQjBDCisjZGVmaW5lCUNPTkZJR19TWVNfQ1M2X0NGRwkJMHgwMEZGRkIwQworI2RlZmluZQlDT05GSUdfU1lTX0NTN19DRkcJCTB4NDA0MDc1MUMKKworI2RlZmluZSBDT05GSUdfU1lTX0NTX0JVUlNUCQkweDAwMDAwMDAwCisjZGVmaW5lIENPTkZJR19TWVNfQ1NfREVBRENZQ0xFCQkweDMzMzMwMDAwCisKKyNkZWZpbmUgQ09ORklHX1NZU19SRVNFVF9BRERSRVNTCTB4ZmYwMDAwMDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVVNCIHN0dWZmCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgQ09ORklHX1VTQl9DTE9DSwkJMHgwMDAxQkJCQgorI2RlZmluZSBDT05GSUdfVVNCX0NPTkZJRwkJMHgwMDAwNTAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJREUvQVRBIHN0dWZmIFN1cHBvcnRzIElERSBoYXJkZGlzaworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIENPTkZJR19JREVfUFJFSU5JVAorCisjZGVmaW5lIENPTkZJR19TWVNfSURFX01BWEJVUwkJMSAvKiBtYXguIDEgSURFIGJ1cyAqLworI2RlZmluZSBDT05GSUdfU1lTX0lERV9NQVhERVZJQ0UJMiAvKiBtYXguIDIgZHJpdmVzIHBlciBJREUgYnVzICovCisKKyNkZWZpbmUgQ09ORklHX1NZU19BVEFfSURFMF9PRkZTRVQJMHgwMDAwCisKKyNkZWZpbmUgQ09ORklHX1NZU19BVEFfQkFTRV9BRERSCU1QQzVYWFhfQVRBCisKKy8qIE9mZnNldCBmb3IgZGF0YSBJL08gKi8KKyNkZWZpbmUgQ09ORklHX1NZU19BVEFfREFUQV9PRkZTRVQJKDB4MDA2MCkKKworLyogT2Zmc2V0IGZvciBub3JtYWwgcmVnaXN0ZXIgYWNjZXNzZXMgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19BVEFfUkVHX09GRlNFVAkoQ09ORklHX1NZU19BVEFfREFUQV9PRkZTRVQpCisKKy8qIE9mZnNldCBmb3IgYWx0ZXJuYXRlIHJlZ2lzdGVycyAqLworI2RlZmluZSBDT05GSUdfU1lTX0FUQV9BTFRfT0ZGU0VUCSgweDAwNUMpCisKKy8qIEludGVydmFsIGJldHdlZW4gcmVnaXN0ZXJzICovCisjZGVmaW5lIENPTkZJR19TWVNfQVRBX1NUUklERQkJNAorCisjZW5kaWYgLyogX19DT05GSUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2thdG1haS5oIGIvaW5jbHVkZS9jb25maWdzL2thdG1haS5oCmluZGV4IDM4NDAyNjcuLmMwMTNhYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9rYXRtYWkuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mva2F0bWFpLmgKQEAgLTE0MCw2ICsxNDAsMTEgQEAKICNkZWZpbmUgQ09ORklHX1NZU19FRVBST01fUEFHRV9XUklURV9CSVRTIDMKICNkZWZpbmUgQ09ORklHX1NZU19FRVBST01fUEFHRV9XUklURV9ERUxBWV9NUyAxMAogCisvKiBJMkMgYm9vdHN0cmFwIEVFUFJPTSAqLworI2RlZmluZSBDT05GSUdfNHh4X0NPTkZJR19JMkNfRUVQUk9NX0FERFIJMHg1MAorI2RlZmluZSBDT05GSUdfNHh4X0NPTkZJR19JMkNfRUVQUk9NX09GRlNFVAkwCisjZGVmaW5lIENPTkZJR180eHhfQ09ORklHX0JMT0NLU0laRQkJOAorCiAvKiBJMkMgUlRDICovCiAjZGVmaW5lIENPTkZJR19SVENfTTQxVDExCTEKICNkZWZpbmUgQ09ORklHX1NZU19SVENfQlVTX05VTQkJMQkvKiBUaGUgSTJDIGJ1cyBmb3IgUlRDCQkqLwpAQCAtMTk0LDggKzE5OSwxMCBAQAogLyoKICAqIENvbW1hbmRzIGFkZGl0aW9uYWwgdG8gdGhlIG9uZXMgZGVmaW5lZCBpbiBhbWNjLWNvbW1vbi5oCiAgKi8KLSNkZWZpbmUgQ09ORklHX0NNRF9FWFQyCisjZGVmaW5lIENPTkZJR19DTURfQ0hJUF9DT05GSUcKICNkZWZpbmUgQ09ORklHX0NNRF9EQVRFCisjZGVmaW5lIENPTkZJR19DTURfRVhUMgorI2RlZmluZSBDT05GSUdfQ01EX0ZBVAogI2RlZmluZSBDT05GSUdfQ01EX1BDSQogI2RlZmluZSBDT05GSUdfQ01EX1NEUkFNCiAjZGVmaW5lIENPTkZJR19DTURfU05UUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2tvcmF0LmggYi9pbmNsdWRlL2NvbmZpZ3Mva29yYXQuaAppbmRleCBlYTZiYTg5Li4wMjZkZDA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mva29yYXQuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mva29yYXQuaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBDT05GSUdfU1lTX09DTV9EQVRBX0FERFIJQ09ORklHX1NZU19PQ01fQkFTRQogI2RlZmluZSBDT05GSUdfU1lTX1BDSV9CQVNFCQkweGUwMDAwMDAwCS8qIEludGVybmFsIFBDSSByZWdzCSovCiAjZGVmaW5lIENPTkZJR19TWVNfUENJX01FTUJBU0UJCTB4ODAwMDAwMDAJLyogbWFwcGVkIHBjaSBtZW1vcnkJKi8KKyNkZWZpbmUgQ09ORklHX1NZU19QQ0lfTUVNQkFTRTIJCShDT05GSUdfU1lTX1BDSV9NRU1CQVNFICsgMHgyMDAwMDAwMCkKIAogLyogRG9uJ3QgY2hhbmdlIGVpdGhlciBvZiB0aGVzZSAqLwogI2RlZmluZSBDT05GSUdfU1lTX1BFUklQSEVSQUxfQkFTRQkweGVmNjAwMDAwCS8qIGludGVybmFsIHBlcmlwaGVyYWxzCSovCkBAIC0zNTksNiArMzYwLDcgQEAKIC8qIEJvYXJkLXNwZWNpZmljIFBDSSAqLwogI2RlZmluZSBDT05GSUdfU1lTX1BDSV9UQVJHRVRfSU5JVAogI2RlZmluZSBDT05GSUdfU1lTX1BDSV9NQVNURVJfSU5JVAorI2RlZmluZSBDT05GSUdfU1lTX1BDSV9CT0FSRF9GSVhVUF9JUlEKIAogI2RlZmluZSBDT05GSUdfU1lTX1BDSV9TVUJTWVNfVkVORE9SSUQgMHgxMGU4CS8qIEFNQ0MJCQkJKi8KICNkZWZpbmUgQ09ORklHX1NZU19QQ0lfU1VCU1lTX0lEICAgICAgIDB4Y2FmZQkvKiBXaGF0ZXZlcgkJCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvbHdtb241LmggYi9pbmNsdWRlL2NvbmZpZ3MvbHdtb241LmgKaW5kZXggNzc3YTRkNi4uMDExZGQ1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL2x3bW9uNS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9sd21vbjUuaApAQCAtMzQ0LDEwICszNDQsMTIgQEAKIC8qIFZpZGVvIGNvbnNvbGUgKi8KICNkZWZpbmUgQ09ORklHX1ZJREVPCiAjZGVmaW5lIENPTkZJR19WSURFT19NQjg2Mnh4CisjZGVmaW5lIENPTkZJR19WSURFT19NQjg2Mnh4X0FDQ0VMCiAjZGVmaW5lIENPTkZJR19DRkJfQ09OU09MRQogI2RlZmluZSBDT05GSUdfVklERU9fTE9HTwogI2RlZmluZSBDT05GSUdfQ09OU09MRV9FWFRSQV9JTkZPCiAjZGVmaW5lIFZJREVPX0ZCXzE2QlBQX1BJWEVMX1NXQVAKKyNkZWZpbmUgVklERU9fRkJfMTZCUFBfV09SRF9TV0FQCiAKICNkZWZpbmUgQ09ORklHX1ZHQV9BU19TSU5HTEVfREVWSUNFCiAjZGVmaW5lIENPTkZJR19WSURFT19TV19DVVJTT1IKQEAgLTQ5NSw4ICs0OTcsNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogR3JhcGhpY3MgKEZ1aml0c3UgTGltZSkKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBTRFJBTSBDbG9jayBmcmVxdWVuY3kgYWRqdXN0bWVudCByZWdpc3RlciAqLwotI2RlZmluZSBDT05GSUdfU1lTX0xJTUVfU0RSQU1fQ0xPQ0sJMHhDMUZDMDAzOAogLyogTGltZSBDbG9jayBmcmVxdWVuY3kgaXMgdG8gc2V0IDEwME1IeiAqLwogI2RlZmluZSBDT05GSUdfU1lTX0xJTUVfQ0xPQ0tfMTAwTUhaCTB4MDAwMDAKICNpZiAwCkBAIC01MDQsMTUgKzUwNCwxNSBAQAogI2RlZmluZSBDT05GSUdfU1lTX0xJTUVfQ0xPQ0tfMTMzTUhaCTB4MTAwMDAKICNlbmRpZgogCi0vKiBTRFJBTSBQYXJhbWV0ZXIgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQ09ORklHX1NZU19MSU1FX01NUgkJMHhDMUZDRkZGQwogLyogU0RSQU0gcGFyYW1ldGVyIHZhbHVlOyB3YXMgMHg0MTRGQjdGMiwgY2F1c2VkIHNldmVyYWwgdmVydGljYWwgYmFycwogICAgYW5kIHBpeGVsIGZsYXJlIG9uIGRpc3BsYXkgd2hlbiAxMzNNSHogd2FzIGNvbmZpZ3VyZWQuIEFjY29yZGluZyB0bwogICAgU0RSQU0gY2hpcCBkYXRhc2hlZXQgQ0FTIExhdGVuY3kgaXMgMyBmb3IgMTMzTUh6IGFuZCAtNzUgU3BlZWQgR3JhZGUgKi8KICNpZmRlZiBDT05GSUdfU1lTX0xJTUVfQ0xPQ0tfMTMzTUhaCi0jZGVmaW5lIENPTkZJR19TWVNfTElNRV9NTVJfVkFMVUUJMHg0MTRGQjdGMworI2RlZmluZSBDT05GSUdfU1lTX01CODYyeHhfTU1SCTB4NDE0RkI3RjMKKyNkZWZpbmUgQ09ORklHX1NZU19NQjg2Mnh4X0NDRglDT05GSUdfU1lTX0xJTUVfQ0xPQ0tfMTMzTUhaCiAjZWxzZQotI2RlZmluZSBDT05GSUdfU1lTX0xJTUVfTU1SX1ZBTFVFCTB4NDE0RkI3RjIKKyNkZWZpbmUgQ09ORklHX1NZU19NQjg2Mnh4X01NUgkweDQxNEZCN0YyCisjZGVmaW5lIENPTkZJR19TWVNfTUI4NjJ4eF9DQ0YJQ09ORklHX1NZU19MSU1FX0NMT0NLXzEwME1IWgogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9tYW5yb2xhbmQvY29tbW9uLmggYi9pbmNsdWRlL2NvbmZpZ3MvbWFucm9sYW5kL2NvbW1vbi5oCmluZGV4IGMwMTIyYjcuLmMwNDgzMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9tYW5yb2xhbmQvY29tbW9uLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL21hbnJvbGFuZC9jb21tb24uaApAQCAtMTI1LDYgKzEyNSw5IEBACiAjZGVmaW5lIENPTkZJR19TWVNfUEJTSVpFIChDT05GSUdfU1lTX0NCU0laRStzaXplb2YoQ09ORklHX1NZU19QUk9NUFQpKzE2KQogI2RlZmluZSBDT05GSUdfU1lTX01BWEFSR1MJCTE2CS8qIG1heCBudW1iZXIgb2YgY29tbWFuZCBhcmdzKi8KICNkZWZpbmUgQ09ORklHX1NZU19CQVJHU0laRQkJQ09ORklHX1NZU19DQlNJWkUKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkJMQkvKiBhZGQgY29tbWFuZCBsaW5lIGhpc3RvcnkgKi8KKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRfSElTVE9SWQkJMQorI2RlZmluZSBDT05GSUdfQVVUT19DT01QTEVURQkJLyogYWRkIGF1dG9jb21wbGV0aW9uIHN1cHBvcnQJKi8KIAogLyogRW5hYmxlIGFuIGFsdGVybmF0ZSwgbW9yZSBleHRlbnNpdmUgbWVtb3J5IHRlc3QgKi8KICNkZWZpbmUgQ09ORklHX1NZU19BTFRfTUVNVEVTVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXAzX2JlYWdsZS5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX2JlYWdsZS5oCmluZGV4IDE5YTVlYzkuLjAyNGI5YjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9vbWFwM19iZWFnbGUuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlLmgKQEAgLTk3LDYgKzk3LDkgQEAKICNkZWZpbmUgQ09ORklHX09NQVAzX01NQwkJMQogI2RlZmluZSBDT05GSUdfRE9TX1BBUlRJVElPTgkJMQogCisvKiBERFIgLSBJIHVzZSBNaWNyb24gRERSICovCisjZGVmaW5lIENPTkZJR19PTUFQM19NSUNST05fRERSCQkxCisKIC8qIGNvbW1hbmRzIHRvIGluY2x1ZGUgKi8KICNpbmNsdWRlIDxjb25maWdfY21kX2RlZmF1bHQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXAzX2V2bS5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX2V2bS5oCmluZGV4IGE1NTE0YWUuLjY3MDllZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9vbWFwM19ldm0uaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfZXZtLmgKQEAgLTEwMSw2ICsxMDEsOSBAQAogI2RlZmluZSBDT05GSUdfT01BUDNfTU1DCQkxCiAjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCQkxCiAKKy8qIEREUiAtIEkgdXNlIE1pY3JvbiBERFIgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzX01JQ1JPTl9ERFIJCTEKKwogLyogY29tbWFuZHMgdG8gaW5jbHVkZSAqLwogI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfb3Zlcm8uaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19vdmVyby5oCmluZGV4IGZmYjUxNWQuLjBmODEyYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9vbWFwM19vdmVyby5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19vdmVyby5oCkBAIC04OSw2ICs4OSw5IEBACiAjZGVmaW5lIENPTkZJR19PTUFQM19NTUMJCTEKICNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04JCTEKIAorLyogRERSIC0gSSB1c2UgTWljcm9uIEREUiAqLworI2RlZmluZSBDT05GSUdfT01BUDNfTUlDUk9OX0REUgkJMQorCiAvKiBjb21tYW5kcyB0byBpbmNsdWRlICovCiAjaW5jbHVkZSA8Y29uZmlnX2NtZF9kZWZhdWx0Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9vbWFwM19wYW5kb3JhLmggYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYS5oCmluZGV4IDZmMjFhZjMuLjBjYWZlYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9vbWFwM19wYW5kb3JhLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX3BhbmRvcmEuaApAQCAtOTIsNiArOTIsOSBAQAogI2RlZmluZSBDT05GSUdfT01BUDNfTU1DCQkxCiAjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCQkxCiAKKy8qIEREUiAtIEkgdXNlIE1pY3JvbiBERFIgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzX01JQ1JPTl9ERFIJCTEKKwogLyogY29tbWFuZHMgdG8gaW5jbHVkZSAqLwogI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfc2RwMzQzMC5oIGIvaW5jbHVkZS9jb25maWdzL29tYXAzX3NkcDM0MzAuaAppbmRleCAyMjlkYzVlLi5kOTFjOGZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfc2RwMzQzMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9vbWFwM19zZHAzNDMwLmgKQEAgLTEzNyw2ICsxMzcsOSBAQAogI2RlZmluZSBDT05GSUdfU1lTX0kyQ19CVVNfU0VMRUNUCTEKICNkZWZpbmUgQ09ORklHX0RSSVZFUl9PTUFQMzRYWF9JMkMJMQogCisvKiBERFIgLSBJIHVzZSBJbmZpbmVvbiBERFIgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzX0lORklORU9OX0REUgkxCisKIC8qIE9NSVRURUQ6ICBzaW5nbGUgMSBHYml0IE1UMjlGMUcgTkFORCBmbGFzaCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL29tYXAzX3pvb20xLmggYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfem9vbTEuaAppbmRleCBkYTRiNjc3Li4yYWVmOTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfem9vbTEuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfem9vbTEuaApAQCAtOTgsNiArOTgsOSBAQAogI2RlZmluZSBDT05GSUdfT01BUDNfTU1DCQkxCiAjZGVmaW5lIENPTkZJR19ET1NfUEFSVElUSU9OCQkxCiAKKy8qIEREUiAtIEkgdXNlIE1pY3JvbiBERFIgKi8KKyNkZWZpbmUgQ09ORklHX09NQVAzX01JQ1JPTl9ERFIJCTEKKwogLyogY29tbWFuZHMgdG8gaW5jbHVkZSAqLwogI2luY2x1ZGUgPGNvbmZpZ19jbWRfZGVmYXVsdC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvb21hcDNfem9vbTIuaCBiL2luY2x1ZGUvY29uZmlncy9vbWFwM196b29tMi5oCmluZGV4IDMyY2Q2ZmQuLjViMDNmYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9vbWFwM196b29tMi5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9vbWFwM196b29tMi5oCkBAIC05OCw2ICs5OCw5IEBACiAjZGVmaW5lIENPTkZJR19PTUFQM19NTUMJCTEKICNkZWZpbmUgQ09ORklHX0RPU19QQVJUSVRJT04JCTEKIAorLyogRERSIC0gSSB1c2UgTWljcm9uIEREUiAqLworI2RlZmluZSBDT05GSUdfT01BUDNfTUlDUk9OX0REUgkJMQorCiAvKiBTdGF0dXMgTEVEICovCiAjZGVmaW5lIENPTkZJR19TVEFUVVNfTEVECQkxIC8qIFN0YXR1cyBMRUQgZW5hYmxlZAkqLwogI2RlZmluZSBDT05GSUdfQk9BUkRfU1BFQ0lGSUNfTEVECTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zYmMyNDEweC5oIGIvaW5jbHVkZS9jb25maWdzL3NiYzI0MTB4LmgKaW5kZXggZTY4ODZjZi4uMDI1YWQwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NiYzI0MTB4LmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NiYzI0MTB4LmgKQEAgLTQzLDkgKzQzLDEwIEBACiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICogKGVhc3kgdG8gY2hhbmdlKQogICovCi0jZGVmaW5lIENPTkZJR19BUk05MjBUCQkxCS8qIFRoaXMgaXMgYW4gQVJNOTIwVCBDb3JlCSovCi0jZGVmaW5lCUNPTkZJR19TM0MyNDEwCQkxCS8qIGluIGEgU0FNU1VORyBTM0MyNDEwIFNvQyAgICAgKi8KLSNkZWZpbmUgQ09ORklHX1NCQzI0MTBYCQkxCS8qIG9uIGEgZnJpZW5kbHktYXJtIFNCQy0yNDEwWCBCb2FyZCAgKi8KKyNkZWZpbmUgQ09ORklHX0FSTTkyMFQJMQkvKiBUaGlzIGlzIGFuIEFSTTkyMFQgQ29yZQkqLworI2RlZmluZSBDT05GSUdfUzNDMjRYMAkxCS8qIGluIGEgU0FNU1VORyBTM0MyNHgwLXR5cGUgU29DCSovCisjZGVmaW5lIENPTkZJR19TM0MyNDEwCTEJLyogc3BlY2lmaWNhbGx5IGEgU0FNU1VORyBTM0MyNDEwIFNvQwkqLworI2RlZmluZSBDT05GSUdfU0JDMjQxMFgJMQkvKiBvbiBhIGZyaWVuZGx5LWFybSBTQkMtMjQxMFggQm9hcmQgICovCiAKIC8qIGlucHV0IGNsb2NrIG9mIFBMTCAqLwogI2RlZmluZSBDT05GSUdfU1lTX0NMS19GUkVRCTEyMDAwMDAwLyogdGhlIFNCQzI0MTBYIGhhcyAxMk1IeiBpbnB1dCBjbG9jayAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NjMy5oIGIvaW5jbHVkZS9jb25maWdzL3NjMy5oCmluZGV4IDU3NjM3NjAuLmQ0Njk3YWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zYzMuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc2MzLmgKQEAgLTM3NiwxMSArMzc2LDYgQEAKICAqIENPTkZJR19TWVNfRkxBU0hfQkFTRSAgIC0+IHN0YXJ0IGFkZHJlc3Mgb2YgaW50ZXJuYWwgZmxhc2gKICAqIENPTkZJR19TWVNfTU9OSVRPUl9CQVNFIC0+IHN0YXJ0IG9mIHUtYm9vdAogICovCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIG9mZnNldE9mQmlnRmxhc2g7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBvZmZzZXRPZkVudmlyb25tZW50OwotI2VuZGlmCi0KICNkZWZpbmUgQ09ORklHX1NZU19TRFJBTV9CQVNFCQkweDAwMDAwMDAwCiAjZGVmaW5lIENPTkZJR19TWVNfRkxBU0hfQkFTRQkJMHhGRkUwMDAwMAogI2RlZmluZSBDT05GSUdfU1lTX01PTklUT1JfQkFTRQkweEZGRkMwMDAwICAgICAvKiBwbGFjZWQgbGFzdCAyNTZrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc2M1MjBfY2RwLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc2M1MjBfY2RwLmgKaW5kZXggMjE0YTlhZi4uMmYxZGFlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NjNTIwX2NkcC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9zYzUyMF9jZHAuaApAQCAtNjUsNyArNjUsNyBAQAogLyoKICAqIFNpemUgb2YgbWFsbG9jKCkgcG9vbAogICovCi0jZGVmaW5lIENPTkZJR19NQUxMT0NfU0laRQkoQ09ORklHX0VOVl9TSVpFICsgMTI4KjEwMjQpCisjZGVmaW5lIENPTkZJR19TWVNfTUFMTE9DX0xFTgkoQ09ORklHX0VOVl9TSVpFICsgMTI4KjEwMjQpCiAKICNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zYzUyMF9zcHVuay5oIGIvaW5jbHVkZS9jb25maWdzL3NjNTIwX3NwdW5rLmgKaW5kZXggZjNmYzk2MC4uY2Y1NjMzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NjNTIwX3NwdW5rLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NjNTIwX3NwdW5rLmgKQEAgLTYzLDcgKzYzLDcgQEAKIC8qCiAgKiBTaXplIG9mIG1hbGxvYygpIHBvb2wKICAqLwotI2RlZmluZSBDT05GSUdfTUFMTE9DX1NJWkUJKENPTkZJR19FTlZfU0laRSArIDEyOCoxMDI0KQorI2RlZmluZSBDT05GSUdfU1lTX01BTExPQ19MRU4JKENPTkZJR19FTlZfU0laRSArIDEyOCoxMDI0KQogCiAKICNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQk5NjAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc2VxdW9pYS5oIGIvaW5jbHVkZS9jb25maWdzL3NlcXVvaWEuaAppbmRleCA5NjA1Y2UyLi41Nzg4ZDU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvc2VxdW9pYS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9zZXF1b2lhLmgKQEAgLTM2NCw2ICszNjQsNyBAQAogLyogQm9hcmQtc3BlY2lmaWMgUENJICovCiAjZGVmaW5lIENPTkZJR19TWVNfUENJX1RBUkdFVF9JTklUCiAjZGVmaW5lIENPTkZJR19TWVNfUENJX01BU1RFUl9JTklUCisjZGVmaW5lIENPTkZJR19TWVNfUENJX0JPQVJEX0ZJWFVQX0lSUQogCiAjZGVmaW5lIENPTkZJR19TWVNfUENJX1NVQlNZU19WRU5ET1JJRCAweDEwZTgJLyogQU1DQwkJCQkqLwogI2RlZmluZSBDT05GSUdfU1lTX1BDSV9TVUJTWVNfSUQgICAgICAgMHhjYWZlCS8qIFdoYXRldmVyCQkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy9zbWRrMjQwMC5oIGIvaW5jbHVkZS9jb25maWdzL3NtZGsyNDAwLmgKaW5kZXggYTFiZWI2NS4uZmQ1MTIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3NtZGsyNDAwLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3NtZGsyNDAwLmgKQEAgLTM0LDkgKzM0LDEwIEBACiAgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucwogICogKGVhc3kgdG8gY2hhbmdlKQogICovCi0jZGVmaW5lIENPTkZJR19BUk05MjBUCQkxCS8qIFRoaXMgaXMgYW4gQVJNOTIwVCBjb3JlCSovCi0jZGVmaW5lIENPTkZJR19TM0MyNDAwCQkxCS8qIGluIGEgU0FNU1VORyBTM0MyNDAwIFNvQwkqLwotI2RlZmluZSBDT05GSUdfU01ESzI0MDAJCTEJLyogb24gYW4gU0FNU1VORyBTTURLMjQwMCBCb2FyZCAqLworI2RlZmluZSBDT05GSUdfQVJNOTIwVAkxCS8qIFRoaXMgaXMgYW4gQVJNOTIwVCBjb3JlCSovCisjZGVmaW5lIENPTkZJR19TM0MyNFgwCTEJLyogaW4gYSBTQU1TVU5HIFMzQzI0eDAtdHlwZSBTb0MJKi8KKyNkZWZpbmUgQ09ORklHX1MzQzI0MDAJMQkvKiBzcGVjaWZpY2FsbHkgYSBTQU1TVU5HIFMzQzI0MDAgU29DCSovCisjZGVmaW5lIENPTkZJR19TTURLMjQwMAkxCS8qIG9uIGFuIFNBTVNVTkcgU01ESzI0MDAgQm9hcmQgKi8KIAogLyogaW5wdXQgY2xvY2sgb2YgUExMICovCiAjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMTIwMDAwMDAgLyogU01ESzI0MDAgaGFzIDEyIE1IeiBpbnB1dCBjbG9jayAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3NtZGsyNDEwLmggYi9pbmNsdWRlL2NvbmZpZ3Mvc21kazI0MTAuaAppbmRleCBjNTc3NTFiLi5mOWQxZTU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2NvbmZpZ3Mvc21kazI0MTAuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3Mvc21kazI0MTAuaApAQCAtMzMsOSArMzMsMTAgQEAKICAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCiAgKiAoZWFzeSB0byBjaGFuZ2UpCiAgKi8KLSNkZWZpbmUgQ09ORklHX0FSTTkyMFQJCTEJLyogVGhpcyBpcyBhbiBBUk05MjBUIENvcmUJKi8KLSNkZWZpbmUJQ09ORklHX1MzQzI0MTAJCTEJLyogaW4gYSBTQU1TVU5HIFMzQzI0MTAgU29DICAgICAqLwotI2RlZmluZSBDT05GSUdfU01ESzI0MTAJCTEJLyogb24gYSBTQU1TVU5HIFNNREsyNDEwIEJvYXJkICAqLworI2RlZmluZSBDT05GSUdfQVJNOTIwVAkxCS8qIFRoaXMgaXMgYW4gQVJNOTIwVCBDb3JlCSovCisjZGVmaW5lIENPTkZJR19TM0MyNFgwCTEJLyogaW4gYSBTQU1TVU5HIFMzQzI0eDAtdHlwZSBTb0MJKi8KKyNkZWZpbmUgQ09ORklHX1MzQzI0MTAJMQkvKiBzcGVjaWZpY2FsbHkgYSBTQU1TVU5HIFMzQzI0MTAgU29DCSovCisjZGVmaW5lIENPTkZJR19TTURLMjQxMAkxCS8qIG9uIGEgU0FNU1VORyBTTURLMjQxMCBCb2FyZCAgKi8KIAogLyogaW5wdXQgY2xvY2sgb2YgUExMICovCiAjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMTIwMDAwMDAvKiB0aGUgU01ESzI0MTAgaGFzIDEyTUh6IGlucHV0IGNsb2NrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc21kazY0MDAuaCBiL2luY2x1ZGUvY29uZmlncy9zbWRrNjQwMC5oCmluZGV4IGY2ZTEyMjEuLmY2NDRjZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zbWRrNjQwMC5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9zbWRrNjQwMC5oCkBAIC00OSw4ICs0OSw2IEBACiAjZGVmaW5lIENPTkZJR19FTkFCTEVfTU1VCiAjZW5kaWYKIAotI2RlZmluZSBDT05GSUdfTUVNT1JZX1VQUEVSX0NPREUKLQogI2RlZmluZSBDT05GSUdfU0VUVVBfTUVNT1JZX1RBR1MKICNkZWZpbmUgQ09ORklHX0NNRExJTkVfVEFHCiAjZGVmaW5lIENPTkZJR19JTklUUkRfVEFHCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3Mvc29jcmF0ZXMuaCBiL2luY2x1ZGUvY29uZmlncy9zb2NyYXRlcy5oCmluZGV4IDM1ZmVlZDAuLjM2MzJiODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy9zb2NyYXRlcy5oCisrKyBiL2luY2x1ZGUvY29uZmlncy9zb2NyYXRlcy5oCkBAIC0xOTgsMTEgKzE5OCwxMyBAQAogCiAjZGVmaW5lIENPTkZJR19WSURFTwogI2RlZmluZSBDT05GSUdfVklERU9fTUI4NjJ4eAorI2RlZmluZSBDT05GSUdfVklERU9fTUI4NjJ4eF9BQ0NFTAogI2RlZmluZSBDT05GSUdfQ0ZCX0NPTlNPTEUKICNkZWZpbmUgQ09ORklHX1ZJREVPX0xPR08KICNkZWZpbmUgQ09ORklHX1ZJREVPX0JNUF9MT0dPCiAjZGVmaW5lIENPTkZJR19DT05TT0xFX0VYVFJBX0lORk8KICNkZWZpbmUgVklERU9fRkJfMTZCUFBfUElYRUxfU1dBUAorI2RlZmluZSBWSURFT19GQl8xNkJQUF9XT1JEX1NXQVAKICNkZWZpbmUgQ09ORklHX1ZHQV9BU19TSU5HTEVfREVWSUNFCiAjZGVmaW5lIENPTkZJR19TWVNfQ09OU09MRV9JU19JTl9FTlYKICNkZWZpbmUgQ09ORklHX1ZJREVPX1NXX0NVUlNPUgpAQCAtMjEwLDYgKzIxMiwxMSBAQAogI2RlZmluZSBDT05GSUdfVklERU9fQk1QX0daSVAKICNkZWZpbmUgQ09ORklHX1NZU19WSURFT19MT0dPX01BWF9TSVpFCSgyIDw8IDIwKQkvKiBkZWNvbXByZXNzZWQgaW1nICovCiAKKy8qIFNEUkFNIENsb2NrIGZyZXF1ZW5jeSwgMTAwTUh6ICgweDAwMDApIG9yIDEzM01IeiAoMHgxMDAwMCkgKi8KKyNkZWZpbmUgQ09ORklHX1NZU19NQjg2Mnh4X0NDRgkJMHgxMDAwMAorLyogU0RSQU0gcGFyYW1ldGVyICovCisjZGVmaW5lIENPTkZJR19TWVNfTUI4NjJ4eF9NTVIJCTB4NDE1N0JBNjMKKwogLyogU2VyaWFsIFBvcnQgKi8KIAogI2RlZmluZSBDT05GSUdfQ09OU19JTkRFWCAgICAgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL3RyYWIuaCBiL2luY2x1ZGUvY29uZmlncy90cmFiLmgKaW5kZXggOTdmMzBjZS4uOTgyNzE5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3RyYWIuaAorKysgYi9pbmNsdWRlL2NvbmZpZ3MvdHJhYi5oCkBAIC00MCwxMCArNDAsMTEgQEAKICAqIEhpZ2ggTGV2ZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zCiAgKiAoZWFzeSB0byBjaGFuZ2UpCiAgKi8KLSNkZWZpbmUgQ09ORklHX0FSTTkyMFQJCTEJLyogVGhpcyBpcyBhbiBhcm05MjB0IENQVQkqLwotI2RlZmluZSBDT05GSUdfUzNDMjQwMAkJMQkvKiBpbiBhIFNBTVNVTkcgUzNDMjQwMCBTb0MJKi8KLSNkZWZpbmUgQ09ORklHX1RSQUIJCTEJLyogb24gYSBUUkFCIEJvYXJkCQkqLwotI3VuZGVmIENPTkZJR19UUkFCXzUwTUhaCQkvKiBydW4gdGhlIENQVSBhdCA1MCBNSHoJKi8KKyNkZWZpbmUgQ09ORklHX0FSTTkyMFQJMQkvKiBUaGlzIGlzIGFuIGFybTkyMHQgQ1BVCSovCisjZGVmaW5lIENPTkZJR19TM0MyNFgwCTEJLyogaW4gYSBTQU1TVU5HIFMzQzI0eDAtdHlwZSBTb0MJKi8KKyNkZWZpbmUgQ09ORklHX1MzQzI0MDAJMQkvKiBzcGVjaWZpY2FsbHkgYSBTQU1TVU5HIFMzQzI0MDAgU29DCSovCisjZGVmaW5lIENPTkZJR19UUkFCCTEJLyogb24gYSBUUkFCIEJvYXJkCQkqLworI3VuZGVmIENPTkZJR19UUkFCXzUwTUhaCS8qIHJ1biB0aGUgQ1BVIGF0IDUwIE1IegkqLwogCiAvKiBhdXRvbWF0aWMgc29mdHdhcmUgdXBkYXRlcyAoc2VlIGJvYXJkL3RyYWIvYXV0b191cGRhdGUuYykgKi8KICNkZWZpbmUgQ09ORklHX0FVVE9fVVBEQVRFCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy95dWNjYS5oIGIvaW5jbHVkZS9jb25maWdzL3l1Y2NhLmgKaW5kZXggYjE2NWJkNy4uNDJmODgwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3l1Y2NhLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3l1Y2NhLmgKQEAgLTM4OSw2ICszODksMTEgQEAKICNkZWZpbmUgRlBHQV9SRUcxQV9QRV9TRUxTT1VSQ0VfMAkweDAwMDIKICNkZWZpbmUgRlBHQV9SRUcxQV9QRV9TRUxTT1VSQ0VfMQkweDAwMDEKIAorI2RlZmluZSBGUEdBX1JFRzFBX0dMRURfRU5DT0RFKG4pCShGUEdBX1JFRzFBX1BFMF9HTEVEID4+IChuKSkKKyNkZWZpbmUgRlBHQV9SRUcxQV9ZTEVEX0VOQ09ERShuKQkoRlBHQV9SRUcxQV9QRTBfWUxFRCA+PiAobikpCisjZGVmaW5lIEZQR0FfUkVHMUFfUFdST05fRU5DT0RFKG4pCShGUEdBX1JFRzFBX1BFMF9QV1JPTiA+PiAobikpCisjZGVmaW5lIEZQR0FfUkVHMUFfUkVGQ0xLX0VOQ09ERShuKQkoRlBHQV9SRUcxQV9QRTBfUkVGQ0xLX0VOQUJMRSA+PiAobikpCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgUENJZSBNaXNjZWxsYW5lb3VzCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC00MDcsNiArNDEyLDkgQEAKICNkZWZpbmUgRlBHQV9SRUcxQ19QRTFfUEVSU1QJCTB4MDAwOAogI2RlZmluZSBGUEdBX1JFRzFDX1BFMl9QRVJTVAkJMHgwMDA0CiAKKyNkZWZpbmUgRlBHQV9SRUcxQ19ST09UUE9JTlRfRU5DT0RFKG4pCShGUEdBX1JFRzFDX1BFMF9ST09UUE9JTlQgPj4gKG4pKQorI2RlZmluZSBGUEdBX1JFRzFDX1BFUlNUX0VOQ09ERShuKQkoRlBHQV9SRUcxQ19QRTBfUEVSU1QgPj4gKG4pKQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IERlZmluZXMKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZXhwb3J0cy5oIGIvaW5jbHVkZS9leHBvcnRzLmgKaW5kZXggMmU4ZmQ4Yi4uYzNhNWQyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9leHBvcnRzLmgKKysrIGIvaW5jbHVkZS9leHBvcnRzLmgKQEAgLTE2LDcgKzE2LDcgQEAKIHZvaWQgZnJlZV9oZGxyKGludCk7CiB2b2lkICptYWxsb2Moc2l6ZV90KTsKIHZvaWQgZnJlZSh2b2lkKik7Ci12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nKTsKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyk7CiB1bnNpZ25lZCBsb25nIGdldF90aW1lcih1bnNpZ25lZCBsb25nKTsKIHZvaWQgdnByaW50Zihjb25zdCBjaGFyICosIHZhX2xpc3QpOwogdm9pZCBkb19yZXNldCAodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ltYWdlLmggYi9pbmNsdWRlL2ltYWdlLmgKaW5kZXggMDRiNjJkMS4uZDJlNzhmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbWFnZS5oCisrKyBiL2luY2x1ZGUvaW1hZ2UuaApAQCAtMTY0LDYgKzE2NCw3IEBACiAjZGVmaW5lIElIX0NPTVBfR1pJUAkJMQkvKiBnemlwCSBDb21wcmVzc2lvbiBVc2VkCSovCiAjZGVmaW5lIElIX0NPTVBfQlpJUDIJCTIJLyogYnppcDIgQ29tcHJlc3Npb24gVXNlZAkqLwogI2RlZmluZSBJSF9DT01QX0xaTUEJCTMJLyogbHptYSAgQ29tcHJlc3Npb24gVXNlZAkqLworI2RlZmluZSBJSF9DT01QX0xaTwkJNAkvKiBsem8gICBDb21wcmVzc2lvbiBVc2VkCSovCiAKICNkZWZpbmUgSUhfTUFHSUMJMHgyNzA1MTk1NgkvKiBJbWFnZSBNYWdpYyBOdW1iZXIJCSovCiAjZGVmaW5lIElIX05NTEVOCQkzMgkvKiBJbWFnZSBOYW1lIExlbmd0aAkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHpvLmggYi9pbmNsdWRlL2xpbnV4L2x6by5oCmluZGV4IGQ3OTM0OTcuLjg4Njg3ZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHpvLmgKKysrIGIvaW5jbHVkZS9saW51eC9sem8uaApAQCAtMjcsNiArMjcsMTAgQEAKIGludCBsem8xeF9kZWNvbXByZXNzX3NhZmUoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBzaXplX3Qgc3JjX2xlbiwKIAkJCXVuc2lnbmVkIGNoYXIgKmRzdCwgc2l6ZV90ICpkc3RfbGVuKTsKIAorLyogZGVjb21wcmVzcyBsem9wIGZvcm1hdCAqLworaW50IGx6b3BfZGVjb21wcmVzcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNpemVfdCBzcmNfbGVuLAorCQkgICAgdW5zaWduZWQgY2hhciAqZHN0LCBzaXplX3QgKmRzdF9sZW4pOworCiAvKgogICogUmV0dXJuIHZhbHVlcyAoPCAwID0gRXJyb3IpCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC1hYmkuaCBiL2luY2x1ZGUvbGludXgvbXRkL210ZC1hYmkuaAppbmRleCA0MTBjNWRkLi44ZDVmNjBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tdGQtYWJpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLWFiaS5oCkBAIC0xMjMsNyArMTIzLDcgQEAKICAqLwogc3RydWN0IG5hbmRfZWNjbGF5b3V0IHsKIAl1aW50MzJfdCBlY2NieXRlczsKLQl1aW50MzJfdCBlY2Nwb3NbNjRdOworCXVpbnQzMl90IGVjY3Bvc1sxMjhdOwogCXVpbnQzMl90IG9vYmF2YWlsOwogCXN0cnVjdCBuYW5kX29vYmZyZWUgb29iZnJlZVtNVERfTUFYX09PQkZSRUVfRU5UUklFU107CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCmluZGV4IGNiN2MxOWEuLjk0YWQwYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKQEAgLTM5Nyw3ICszOTcsNyBAQAogCWludAkJYmJ0X2VyYXNlX3NoaWZ0OwogCWludAkJY2hpcF9zaGlmdDsKIAlpbnQJCW51bWNoaXBzOwotCXVuc2lnbmVkIGxvbmcJY2hpcHNpemU7CisJdWludDY0X3QJY2hpcHNpemU7CiAJaW50CQlwYWdlbWFzazsKIAlpbnQJCXBhZ2VidWY7CiAJaW50CQlzdWJwYWdlc2l6ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaAppbmRleCA5YTZmMzE3Li42OGUxNzRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCkBAIC0yMCw4ICsyMCw5IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9iYm0uaD4KIAorI2RlZmluZSBNQVhfRElFUwkJMgogI2RlZmluZSBNQVhfQlVGRkVSUkFNCQkyCi0jZGVmaW5lIE1BWF9PTkVOQU5EX1BBR0VTSVpFCSgyMDQ4ICsgNjQpCisjZGVmaW5lIE1BWF9PTkVOQU5EX1BBR0VTSVpFCSg0MDk2ICsgMTI4KQogCiAvKiBTY2FuIGFuZCBpZGVudGlmeSBhIE9uZU5BTkQgZGV2aWNlICovCiBleHRlcm4gaW50IG9uZW5hbmRfc2NhbiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtYXhfY2hpcHMpOwpAQCAtMzksOSArNDAsMTQgQEAKIC8qKgogICogc3RydWN0IG9uZW5hbmRfY2hpcCAtIE9uZU5BTkQgUHJpdmF0ZSBGbGFzaCBDaGlwIERhdGEKICAqIEBwYXJhbSBiYXNlCQlbQk9BUkRTUEVDSUZJQ10gYWRkcmVzcyB0byBhY2Nlc3MgT25lTkFORAorICogQGRpZXM6ICAgICAgICAgICAgICAgW0lOVEVSTl1bRkxFWE9ORU5BTkRdIG51bWJlciBvZiBkaWVzIG9uIGNoaXAKKyAqIEBib3VuZGFyeTogICAgICAgICAgIFtJTlRFUk5dW0ZMRVhPTkVOQU5EXSBCb3VuZGFyeSBvZiB0aGUgZGllcworICogQGRpZXNpemU6ICAgICAgICAgICAgW0lOVEVSTl1bRkxFWE9ORU5BTkRdIFNpemUgb2YgdGhlIGRpZXMKICAqIEBwYXJhbSBjaGlwc2l6ZQlbSU5URVJOXSB0aGUgc2l6ZSBvZiBvbmUgY2hpcCBmb3IgbXVsdGljaGlwIGFycmF5cwogICogQHBhcmFtIGRldmljZV9pZAlbSU5URVJOXSBkZXZpY2UgSUQKICAqIEBwYXJhbSB2ZXJzdGlvbl9pZAlbSU5URVJOXSB2ZXJzaW9uIElECisgKiBAdGVjaG5vbG9neQkJW0lOVEVSTl0gZGVzY3JpYmVzIHRoZSBpbnRlcm5hbCBOQU5EIGFycmF5IHRlY2hub2xvZ3kgc3VjaCBhcyBTTEMgb3IgTUxDLgorICogQGRlbnNpdHlfbWFzazoJW0lOVEVSTl0gY2hpcCBkZW5zaXR5LCB1c2VkIGZvciBERFAgZGV2aWNlcwogICogQHBhcmFtIG9wdGlvbnMJW0JPQVJEU1BFQ0lGSUNdIHZhcmlvdXMgY2hpcCBvcHRpb25zLiBUaGV5IGNhbiBwYXJ0bHkgYmUgc2V0IHRvIGluZm9ybSBvbmVuYW5kX3NjYW4gYWJvdXQKICAqIEBwYXJhbSBlcmFzZV9zaGlmdAlbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgYmxvY2sKICAqIEBwYXJhbSBwYWdlX3NoaWZ0CVtJTlRFUk5dIG51bWJlciBvZiBhZGRyZXNzIGJpdHMgaW4gYSBwYWdlCkBAIC02NCw5ICs3MCwxMyBAQAogICovCiBzdHJ1Y3Qgb25lbmFuZF9jaGlwIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CisJdW5zaWduZWQgaW50IGRpZXM7CisJdW5zaWduZWQgaW50IGJvdW5kYXJ5W01BWF9ESUVTXTsKKwl1bnNpZ25lZCBpbnQgZGllc2l6ZVtNQVhfRElFU107CiAJdW5zaWduZWQgaW50IGNoaXBzaXplOwogCXVuc2lnbmVkIGludCBkZXZpY2VfaWQ7CiAJdW5zaWduZWQgaW50IHZlcnNpb25faWQ7CisJdW5zaWduZWQgaW50IHRlY2hub2xvZ3k7CiAJdW5zaWduZWQgaW50IGRlbnNpdHlfbWFzazsKIAl1bnNpZ25lZCBpbnQgb3B0aW9uczsKIApAQCAtMTI0LDYgKzEzNCw4IEBACiAjZGVmaW5lIE9ORU5BTkRfU0VUX0JVRkZFUlJBTTAodGhpcykJCSh0aGlzLT5idWZmZXJyYW1faW5kZXggPSAwKQogI2RlZmluZSBPTkVOQU5EX1NFVF9CVUZGRVJSQU0xKHRoaXMpCQkodGhpcy0+YnVmZmVycmFtX2luZGV4ID0gMSkKIAorI2RlZmluZSBGTEVYT05FTkFORCh0aGlzKQkodGhpcy0+ZGV2aWNlX2lkICYgREVWSUNFX0lTX0ZMRVhPTkVOQU5EKQorI2RlZmluZSBPTkVOQU5EX0lTX01MQyh0aGlzKQkodGhpcy0+dGVjaG5vbG9neSAmIE9ORU5BTkRfVEVDSE5PTE9HWV9JU19NTEMpCiAjZGVmaW5lIE9ORU5BTkRfSVNfRERQKHRoaXMpCQkJCQkJXAogCSh0aGlzLT5kZXZpY2VfaWQgJiBPTkVOQU5EX0RFVklDRV9JU19ERFApCiAKQEAgLTE1Nyw0ICsxNjksNiBAQAogaW50IG9uZW5hbmRfYmJ0X3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKIAkJCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKIAordW5zaWduZWQgaW50IG9uZW5hbmRfYmxvY2soc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcywgbG9mZl90IGFkZHIpOworaW50IGZsZXhvbmVuYW5kX3JlZ2lvbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGFkZHIpOwogI2VuZGlmCQkJCS8qIF9fTElOVVhfTVREX09ORU5BTkRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZF9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaAppbmRleCAwN2ZlZDFjLi44NDQ5YTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaApAQCAtNjcsNiArNjcsOSBAQAogLyoKICAqIERldmljZSBJRCBSZWdpc3RlciBGMDAxaCAoUikKICAqLworI2RlZmluZSBERVZJQ0VfSVNfRkxFWE9ORU5BTkQJCSgxIDw8IDkpCisjZGVmaW5lIEZMRVhPTkVOQU5EX1BJX01BU0sJCSgweDNmZikKKyNkZWZpbmUgRkxFWE9ORU5BTkRfUElfVU5MT0NLX1NISUZUCSgxNCkKICNkZWZpbmUgT05FTkFORF9ERVZJQ0VfREVOU0lUWV9NQVNLCSgweGYpCiAjZGVmaW5lIE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfU0hJRlQJKDQpCiAjZGVmaW5lIE9ORU5BTkRfREVWSUNFX0lTX0REUAkJKDEgPDwgMykKQEAgLTg0LDYgKzg3LDExIEBACiAjZGVmaW5lIE9ORU5BTkRfVkVSU0lPTl9QUk9DRVNTX1NISUZUCSg4KQogCiAvKgorICogVGVjaG5vbG9neSBSZWdpc3RlciBGMDA2aCAoUikKKyAqLworI2RlZmluZSBPTkVOQU5EX1RFQ0hOT0xPR1lfSVNfTUxDCSgxIDw8IDApCisKKy8qCiAgKiBTdGFydCBBZGRyZXNzIDEgRjEwMGggKFIvVykKICAqLwogI2RlZmluZSBPTkVOQU5EX0REUF9TSElGVAkJKDE1KQpAQCAtOTMsNyArMTAxLDcgQEAKIC8qCiAgKiBTdGFydCBBZGRyZXNzIDggRjEwN2ggKFIvVykKICAqLwotI2RlZmluZSBPTkVOQU5EX0ZQQV9NQVNLCQkoMHgzZikKKyNkZWZpbmUgT05FTkFORF9GUEFfTUFTSwkJKDB4N2YpCiAjZGVmaW5lIE9ORU5BTkRfRlBBX1NISUZUCQkoMikKICNkZWZpbmUgT05FTkFORF9GU0FfTUFTSwkJKDB4MDMpCiAKQEAgLTEwNSw3ICsxMTMsNyBAQAogI2RlZmluZSBPTkVOQU5EX0JTQV9CT09UUkFNCQkoMCA8PCAyKQogI2RlZmluZSBPTkVOQU5EX0JTQV9EQVRBUkFNMAkJKDIgPDwgMikKICNkZWZpbmUgT05FTkFORF9CU0FfREFUQVJBTTEJCSgzIDw8IDIpCi0jZGVmaW5lIE9ORU5BTkRfQlNDX01BU0sJCSgweDAzKQorI2RlZmluZSBPTkVOQU5EX0JTQ19NQVNLCQkoMHgwNykKIAogLyoKICAqIENvbW1hbmQgUmVnaXN0ZXIgRjIyMGggKFIvVykKQEAgLTEyNSw5ICsxMzMsMTQgQEAKICNkZWZpbmUgT05FTkFORF9DTURfRVJBU0VfVkVSSUZZCSgweDcxKQogI2RlZmluZSBPTkVOQU5EX0NNRF9SRVNFVAkJKDB4RjApCiAjZGVmaW5lIE9ORU5BTkRfQ01EX1JFQURJRAkJKDB4OTApCisjZGVmaW5lIEZMRVhPTkVOQU5EX0NNRF9SRVNFVAkJKDB4RjMpCisjZGVmaW5lIEZMRVhPTkVOQU5EX0NNRF9QSV9VUERBVEUJKDB4MDUpCisjZGVmaW5lIEZMRVhPTkVOQU5EX0NNRF9QSV9BQ0NFU1MJKDB4NjYpCisjZGVmaW5lIEZMRVhPTkVOQU5EX0NNRF9SRUNPVkVSX0xTQgkoMHgwNSkKIAogLyogTk9URTogVGhvc2UgYXJlIG5vdCAqUkVBTCogY29tbWFuZHMgKi8KICNkZWZpbmUgT05FTkFORF9DTURfQlVGRkVSUkFNCQkoMHgxOTc4KQorI2RlZmluZSBGTEVYT05FTkFORF9DTURfUkVBRF9QSQkJKDB4MTk4NSkKIAogLyoKICAqIFN5c3RlbSBDb25maWd1cmF0aW9uIDEgUmVnaXN0ZXIgRjIyMWggKFIsIFIvVykKQEAgLTE5MCw1ICsyMDMsNiBAQAogI2RlZmluZSBPTkVOQU5EX0VDQ18yQklUCQkoMSA8PCAxKQogI2RlZmluZSBPTkVOQU5EX0VDQ18yQklUX0FMTAkJKDB4QUFBQSkKICNkZWZpbmUgT05FTkFORF9FQ0NfNEJJVF9VTkNPUlJFQ1RBQkxFCSgweDEwMTApCisjZGVmaW5lIEZMRVhPTkVOQU5EX1VOQ09SUkVDVEFCTEVfRVJST1IgKDB4MTAxMCkKIAogI2VuZGlmCQkJCS8qIF9fT05FTkFORF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCmluZGV4IDEwMTY2NzUuLmQxZDlhOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKQEAgLTM4LDggKzM4LDggQEAKIAogc3RydWN0IG10ZF9wYXJ0aXRpb24gewogCWNoYXIgKm5hbWU7CQkJLyogaWRlbnRpZmllciBzdHJpbmcgKi8KLQl1X2ludDMyX3Qgc2l6ZTsJCQkvKiBwYXJ0aXRpb24gc2l6ZSAqLwotCXVfaW50MzJfdCBvZmZzZXQ7CQkvKiBvZmZzZXQgd2l0aGluIHRoZSBtYXN0ZXIgTVREIHNwYWNlICovCisJdWludDY0X3Qgc2l6ZTsJCQkvKiBwYXJ0aXRpb24gc2l6ZSAqLworCXVpbnQ2NF90IG9mZnNldDsJCS8qIG9mZnNldCB3aXRoaW4gdGhlIG1hc3RlciBNVEQgc3BhY2UgKi8KIAl1X2ludDMyX3QgbWFza19mbGFnczsJCS8qIG1hc3RlciBNVEQgZmxhZ3MgdG8gbWFzayBvdXQgZm9yIHRoaXMgcGFydGl0aW9uICovCiAJc3RydWN0IG5hbmRfZWNjbGF5b3V0ICplY2NsYXlvdXQ7CS8qIG91dCBvZiBiYW5kIGxheW91dCBmb3IgdGhpcyBwYXJ0aXRpb24gKE5BTkQgb25seSkqLwogCXN0cnVjdCBtdGRfaW5mbyAqKm10ZHA7CQkvKiBwb2ludGVyIHRvIHN0b3JlIHRoZSBNVEQgb2JqZWN0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21iODYyeHguaCBiL2luY2x1ZGUvbWI4NjJ4eC5oCmluZGV4IDQzZjAxZTcuLjAwOWRhMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWI4NjJ4eC5oCisrKyBiL2luY2x1ZGUvbWI4NjJ4eC5oCkBAIC0zMiw2ICszMiw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09SQUxfUAkweDIwMTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DT1JBTF9QQQkweDIwMUUKIAorI2RlZmluZSBNQjg2MlhYX1RZUEVfTElNRQkweDEKKwogI2RlZmluZSBHQ19IT1NUX0JBU0UJCTB4MDFmYzAwMDAKICNkZWZpbmUgR0NfRElTUF9CQVNFCQkweDAxZmQwMDAwCiAjZGVmaW5lIEdDX0RSQVdfQkFTRQkJMHgwMWZmMDAwMApAQCAtMzksNiArNDEsNyBAQAogLyogSG9zdCBpbnRlcmZhY2UgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEdDX1NSU1QJCQkweDAwMDAwMDJjCiAjZGVmaW5lIEdDX0NDRgkJCTB4MDAwMDAwMzgKKyNkZWZpbmUgR0NfQ0lECQkJMHgwMDAwMDBmMAogI2RlZmluZSBHQ19NTVIJCQkweDAwMDBmZmZjCiAKIC8qCkBAIC05OSw2ICsxMDIsNyBAQAogI2RlZmluZSBHQ19GQwkJCTB4MDAwMDA0ODAKICNkZWZpbmUgR0NfQkMJCQkweDAwMDAwNDg0CiAjZGVmaW5lIEdDX0ZJRk8JCQkweDAwMDAwNGEwCisjZGVmaW5lIEdDX1JFVgkJCTB4MDAwMDgwODQKICNkZWZpbmUgR0NfR0VPX0ZJRk8JCTB4MDAwMDg0MDAKIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtMTA2LDYgKzExMCw3IEBACiAJdW5zaWduZWQgaW50IHZhbHVlOwogfSBnZGNfcmVnczsKIAoraW50IG1iODYyeHhfcHJvYmUodW5zaWduZWQgaW50IGFkZHIpOwogY29uc3QgZ2RjX3JlZ3MgKmJvYXJkX2dldF9yZWdzICh2b2lkKTsKIHVuc2lnbmVkIGludCBib2FyZF92aWRlb19pbml0ICh2b2lkKTsKIHZvaWQgYm9hcmRfYmFja2xpZ2h0X3N3aXRjaChpbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9vbmVuYW5kX3Vib290LmggYi9pbmNsdWRlL29uZW5hbmRfdWJvb3QuaAppbmRleCA0OWRhOWQwLi45MjI3OWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL29uZW5hbmRfdWJvb3QuaAorKysgYi9pbmNsdWRlL29uZW5hbmRfdWJvb3QuaApAQCAtMjMsNiArMjMsNyBAQAogc3RydWN0IG9uZW5hbmRfY2hpcDsKIAogZXh0ZXJuIHN0cnVjdCBtdGRfaW5mbyBvbmVuYW5kX210ZDsKK2V4dGVybiBzdHJ1Y3Qgb25lbmFuZF9jaGlwIG9uZW5hbmRfY2hpcDsKIAogLyogYm9hcmQgKi8KIGV4dGVybiB2b2lkIG9uZW5hbmRfYm9hcmRfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKik7CkBAIC0zOCw2ICszOSwxNSBAQAogCiBleHRlcm4gY2hhciAqb25lbmFuZF9wcmludF9kZXZpY2VfaW5mbyhpbnQgZGV2aWNlLCBpbnQgdmVyc2lvbik7CiAKK2V4dGVybiB1bnNpZ25lZCBvbmVuYW5kX2Jsb2NrKHN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMsIGxvZmZfdCBhZGRyKTsKKworZXh0ZXJuIGxvZmZfdCBvbmVuYW5kX2FkZHIoc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcywgaW50IGJsb2NrKTsKKworZXh0ZXJuIGludCBmbGV4b25lbmFuZF9yZWdpb24oc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBhZGRyKTsKKworZXh0ZXJuIGludCBmbGV4b25lbmFuZF9zZXRfYm91bmRhcnkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBkaWUsCisJCQkJCWludCBib3VuZGFyeSwgaW50IGxvY2spOworCiAvKiBTM0M2NHh4ICovCiBleHRlcm4gdm9pZCBzM2M2NHh4X29uZW5hbmRfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKik7CiBleHRlcm4gdm9pZCBzM2M2NHh4X3NldF93aWR0aF9yZWdzKHN0cnVjdCBvbmVuYW5kX2NoaXAgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3BjYTk1NjQuaCBiL2luY2x1ZGUvcGNhOTU2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNzUyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3BjYTk1NjQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogRmlsZTogICAgICAgICBpbmNsdWRlL3BjYTk1NjQuaAorICogQXV0aG9yOgorICoKKyAqIENyZWF0ZWQ6ICAgICAgMjAwOS0wNi0yMworICogRGVzY3JpcHRpb246ICBQQ0E5NTY0IGkyYyBicmlkZ2UgZHJpdmVyCisgKgorICogTW9kaWZpZWQ6CisgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA5IENKU0MgIk5JSSBTVFQiLCBodHRwOi8vd3d3Lm5paXN0dC5ydS8KKyAqCisgKiBCdWdzOgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCisgKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIF9QQ0E5NTY0X0gKKyNkZWZpbmUgX1BDQTk1NjRfSAorCisvKiBDbG9jayBzcGVlZHMgZm9yIHRoZSBidXMgKi8KKyNkZWZpbmUgUENBX0NPTl8zMzBrSHogICAgICAweDAwCisjZGVmaW5lIFBDQV9DT05fMjg4a0h6ICAgICAgMHgwMQorI2RlZmluZSBQQ0FfQ09OXzIxN2tIeiAgICAgIDB4MDIKKyNkZWZpbmUgUENBX0NPTl8xNDZrSHogICAgICAweDAzCisjZGVmaW5lIFBDQV9DT05fODhrSHogICAgICAgMHgwNAorI2RlZmluZSBQQ0FfQ09OXzU5a0h6ICAgICAgIDB4MDUKKyNkZWZpbmUgUENBX0NPTl80NGtIeiAgICAgICAweDA2CisjZGVmaW5lIFBDQV9DT05fMzZrSHogICAgICAgMHgwNworCisjZGVmaW5lIFBDQV9DT05fQUEgICAgICAgICAgMHg4MCAvKiBBc3NlcnQgQWNrbm93bGVkZ2UgKi8KKyNkZWZpbmUgUENBX0NPTl9FTlNJTyAgICAgICAweDQwIC8qIEVuYWJsZSAqLworI2RlZmluZSBQQ0FfQ09OX1NUQSAgICAgICAgIDB4MjAgLyogU3RhcnQgKi8KKyNkZWZpbmUgUENBX0NPTl9TVE8gICAgICAgICAweDEwIC8qIFN0b3AgKi8KKyNkZWZpbmUgUENBX0NPTl9TSSAgICAgICAgICAweDA4IC8qIFNlcmlhbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgUENBX0NPTl9DUiAgICAgICAgICAweDA3IC8qIENsb2NrIFJhdGUgKE1BU0spICovCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL3BwYzQwNS5oIGIvaW5jbHVkZS9wcGM0MDUuaAppbmRleCA1MDhjNzdiLi5iYzJkMDUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BwYzQwNS5oCisrKyBiL2luY2x1ZGUvcHBjNDA1LmgKQEAgLTU2NiwyNSArNTY2LDYgQEAKICNkZWZpbmUJTUFMMF9SQ0JTMjQJKE1BTF9EQ1JfQkFTRSArIDB4NzgpIC8qIFJYIDI0IENoYW5uZWwgYnVmZmVyIHNpemUgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotfCBJSUMgUmVnaXN0ZXIgT2Zmc2V0cwotJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSAgICBJSUNNREJVRgkgICAgMHgwMAotI2RlZmluZSAgICBJSUNTREJVRgkgICAgMHgwMgotI2RlZmluZSAgICBJSUNMTUFEUgkgICAgMHgwNAotI2RlZmluZSAgICBJSUNITUFEUgkgICAgMHgwNQotI2RlZmluZSAgICBJSUNDTlRMCSAgICAweDA2Ci0jZGVmaW5lICAgIElJQ01EQ05UTAkgICAgMHgwNwotI2RlZmluZSAgICBJSUNTVFMJICAgIDB4MDgKLSNkZWZpbmUgICAgSUlDRVhUU1RTCSAgICAweDA5Ci0jZGVmaW5lICAgIElJQ0xTQURSCSAgICAweDBBCi0jZGVmaW5lICAgIElJQ0hTQURSCSAgICAweDBCCi0jZGVmaW5lICAgIElJQzBfQ0xLRElWCSAgICAweDBDCi0jZGVmaW5lICAgIElJQ0lOVFJNU0sJICAgIDB4MEQKLSNkZWZpbmUgICAgSUlDWEZSQ05UCSAgICAweDBFCi0jZGVmaW5lICAgIElJQ1hUQ05UTFNTCSAgICAweDBGCi0jZGVmaW5lICAgIElJQ0RJUkVDVENOVEwgICAgMHgxMAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB8IFVBUlQgUmVnaXN0ZXIgT2Zmc2V0cwogJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZQkJREFUQV9SRUcJMHgwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcGM0NDAuaCBiL2luY2x1ZGUvcHBjNDQwLmgKaW5kZXggZTU0YTk3Ny4uZTYwZmExMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wcGM0NDAuaAorKysgYi9pbmNsdWRlL3BwYzQ0MC5oCkBAIC0xMjc2LDcgKzEyNzYsOCBAQAogI2RlZmluZSBDUEMwX1NUUlAxX1BBRV9NQVNLCQkoMHg4MDAwMDAwMCA+PiAxMSkKICNkZWZpbmUgQ1BDMF9TVFJQMV9QSVNFX01BU0sJCSgweDgwMDAwMDAwID4+IDEzKQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzQ0MEdQKSAqLwotI2lmIGRlZmluZWQoQ09ORklHXzQ0MEdYKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1ApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR180NjBFWCkgfHwgZGVmaW5lZChDT05GSUdfNDYwR1QpCiAjZGVmaW5lIFNEUjBfU0RTVFAxX1BBRV9NQVNLCQkoMHg4MDAwMDAwMCA+PiAxMykKICNkZWZpbmUgU0RSMF9TRFNUUDFfUElTRV9NQVNLCQkoMHg4MDAwMDAwMCA+PiAxNSkKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwU1ApICovCkBAIC0xNzEzLDI1ICsxNzE0LDYgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi18IElJQyBSZWdpc3RlciBPZmZzZXRzCi0nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lIElJQ01EQlVGCQkweDAwCi0jZGVmaW5lIElJQ1NEQlVGCQkweDAyCi0jZGVmaW5lIElJQ0xNQURSCQkweDA0Ci0jZGVmaW5lIElJQ0hNQURSCQkweDA1Ci0jZGVmaW5lIElJQ0NOVEwJCQkweDA2Ci0jZGVmaW5lIElJQ01EQ05UTAkJMHgwNwotI2RlZmluZSBJSUNTVFMJCQkweDA4Ci0jZGVmaW5lIElJQ0VYVFNUUwkJMHgwOQotI2RlZmluZSBJSUNMU0FEUgkJMHgwQQotI2RlZmluZSBJSUNIU0FEUgkJMHgwQgotI2RlZmluZSBJSUMwX0NMS0RJVgkJMHgwQwotI2RlZmluZSBJSUNJTlRSTVNLCQkweDBECi0jZGVmaW5lIElJQ1hGUkNOVAkJMHgwRQotI2RlZmluZSBJSUNYVENOVExTUwkJMHgwRgotI2RlZmluZSBJSUNESVJFQ1RDTlRMCQkweDEwCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHwgUENJIEludGVybmFsIFJlZ2lzdGVycyBldC4gYWwuIChhY2Nlc3NlZCB2aWEgcGxiKQogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZSBQQ0lMMF9DRkdBRFIJCShDT05GSUdfU1lTX1BDSV9CQVNFICsgMHgwZWMwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvczNjMjR4MC5oIGIvaW5jbHVkZS9zM2MyNHgwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2YTU1MWEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9zM2MyNHgwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NTYgKzAsMCBAQAotLyoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMwotICogRGF2aWQgTfxsbGVyIEVMU09GVCBBRyBTd2l0emVybGFuZC4gZC5tdWVsbGVyQGVsc29mdC5jaAotICoKLSAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCi0gKiBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gKiBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIE5BTUUJICAgIDogczNjMjR4MC5oCi0gKiBWZXJzaW9uICA6IDMxLjMuMjAwMwotICoKLSAqIGNvbW1vbiBzdHVmZiBmb3IgU0FNU1VORyBTM0MyNFgwIFNvQwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX1MzQzI0WDBfSF9fCi0jZGVmaW5lIF9fUzNDMjRYMF9IX18KLQotdHlwZWRlZiB2b2xhdGlsZSB1OAlTM0MyNFgwX1JFRzg7Ci10eXBlZGVmIHZvbGF0aWxlIHUxNglTM0MyNFgwX1JFRzE2OwotdHlwZWRlZiB2b2xhdGlsZSB1MzIJUzNDMjRYMF9SRUczMjsKLQotLyogTWVtb3J5IGNvbnRyb2xsZXIgKHNlZSBtYW51YWwgY2hhcHRlciA1KSAqLwotc3RydWN0IHMzYzI0eDBfbWVtY3RsIHsKLQlTM0MyNFgwX1JFRzMyCUJXU0NPTjsKLQlTM0MyNFgwX1JFRzMyCUJBTktDT05bOF07Ci0JUzNDMjRYMF9SRUczMglSRUZSRVNIOwotCVMzQzI0WDBfUkVHMzIJQkFOS1NJWkU7Ci0JUzNDMjRYMF9SRUczMglNUlNSQjY7Ci0JUzNDMjRYMF9SRUczMglNUlNSQjc7Ci19OwotCi0KLS8qIFVTQiBIT1NUIChzZWUgbWFudWFsIGNoYXB0ZXIgMTIpICovCi1zdHJ1Y3QgczNjMjR4MF91c2JfaG9zdCB7Ci0JUzNDMjRYMF9SRUczMglIY1JldmlzaW9uOwotCVMzQzI0WDBfUkVHMzIJSGNDb250cm9sOwotCVMzQzI0WDBfUkVHMzIJSGNDb21tb25TdGF0dXM7Ci0JUzNDMjRYMF9SRUczMglIY0ludGVycnVwdFN0YXR1czsKLQlTM0MyNFgwX1JFRzMyCUhjSW50ZXJydXB0RW5hYmxlOwotCVMzQzI0WDBfUkVHMzIJSGNJbnRlcnJ1cHREaXNhYmxlOwotCVMzQzI0WDBfUkVHMzIJSGNIQ0NBOwotCVMzQzI0WDBfUkVHMzIJSGNQZXJpb2RDdXR0ZW5kRUQ7Ci0JUzNDMjRYMF9SRUczMglIY0NvbnRyb2xIZWFkRUQ7Ci0JUzNDMjRYMF9SRUczMglIY0NvbnRyb2xDdXJyZW50RUQ7Ci0JUzNDMjRYMF9SRUczMglIY0J1bGtIZWFkRUQ7Ci0JUzNDMjRYMF9SRUczMglIY0J1bGRDdXJyZW50RUQ7Ci0JUzNDMjRYMF9SRUczMglIY0RvbmVIZWFkOwotCVMzQzI0WDBfUkVHMzIJSGNSbUludGVydmFsOwotCVMzQzI0WDBfUkVHMzIJSGNGbVJlbWFpbmluZzsKLQlTM0MyNFgwX1JFRzMyCUhjRm1OdW1iZXI7Ci0JUzNDMjRYMF9SRUczMglIY1BlcmlvZGljU3RhcnQ7Ci0JUzNDMjRYMF9SRUczMglIY0xTVGhyZXNob2xkOwotCVMzQzI0WDBfUkVHMzIJSGNSaERlc2NyaXB0b3JBOwotCVMzQzI0WDBfUkVHMzIJSGNSaERlc2NyaXB0b3JCOwotCVMzQzI0WDBfUkVHMzIJSGNSaFN0YXR1czsKLQlTM0MyNFgwX1JFRzMyCUhjUmhQb3J0U3RhdHVzMTsKLQlTM0MyNFgwX1JFRzMyCUhjUmhQb3J0U3RhdHVzMjsKLX07Ci0KLQotLyogSU5URVJSVVBUIChzZWUgbWFudWFsIGNoYXB0ZXIgMTQpICovCi1zdHJ1Y3QgczNjMjR4MF9pbnRlcnJ1cHQgewotCVMzQzI0WDBfUkVHMzIJU1JDUE5EOwotCVMzQzI0WDBfUkVHMzIJSU5UTU9EOwotCVMzQzI0WDBfUkVHMzIJSU5UTVNLOwotCVMzQzI0WDBfUkVHMzIJUFJJT1JJVFk7Ci0JUzNDMjRYMF9SRUczMglJTlRQTkQ7Ci0JUzNDMjRYMF9SRUczMglJTlRPRkZTRVQ7Ci0jaWZkZWYgQ09ORklHX1MzQzI0MTAKLQlTM0MyNFgwX1JFRzMyCVNVQlNSQ1BORDsKLQlTM0MyNFgwX1JFRzMyCUlOVFNVQk1TSzsKLSNlbmRpZgotfTsKLQotCi0vKiBETUFTIChzZWUgbWFudWFsIGNoYXB0ZXIgOCkgKi8KLXN0cnVjdCBzM2MyNHgwX2RtYSB7Ci0JUzNDMjRYMF9SRUczMglESVNSQzsKLSNpZmRlZiBDT05GSUdfUzNDMjQxMAotCVMzQzI0WDBfUkVHMzIJRElTUkNDOwotI2VuZGlmCi0JUzNDMjRYMF9SRUczMglESURTVDsKLSNpZmRlZiBDT05GSUdfUzNDMjQxMAotCVMzQzI0WDBfUkVHMzIJRElEU1RDOwotI2VuZGlmCi0JUzNDMjRYMF9SRUczMglEQ09OOwotCVMzQzI0WDBfUkVHMzIJRFNUQVQ7Ci0JUzNDMjRYMF9SRUczMglEQ1NSQzsKLQlTM0MyNFgwX1JFRzMyCURDRFNUOwotCVMzQzI0WDBfUkVHMzIJRE1BU0tUUklHOwotI2lmZGVmIENPTkZJR19TM0MyNDAwCi0JUzNDMjRYMF9SRUczMglyZXNbMV07Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUzNDMjQxMAotCVMzQzI0WDBfUkVHMzIJcmVzWzddOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgczNjMjR4MF9kbWFzIHsKLQlzdHJ1Y3QgczNjMjR4MF9kbWEJZG1hWzRdOwotfTsKLQotCi0vKiBDTE9DSyAmIFBPV0VSIE1BTkFHRU1FTlQgKHNlZSBTM0MyNDAwIG1hbnVhbCBjaGFwdGVyIDYpICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBTM0MyNDEwIG1hbnVhbCBjaGFwdGVyIDcpICovCi1zdHJ1Y3QgczNjMjR4MF9jbG9ja19wb3dlciB7Ci0JUzNDMjRYMF9SRUczMglMT0NLVElNRTsKLQlTM0MyNFgwX1JFRzMyCU1QTExDT047Ci0JUzNDMjRYMF9SRUczMglVUExMQ09OOwotCVMzQzI0WDBfUkVHMzIJQ0xLQ09OOwotCVMzQzI0WDBfUkVHMzIJQ0xLU0xPVzsKLQlTM0MyNFgwX1JFRzMyCUNMS0RJVk47Ci19OwotCi0KLS8qIExDRCBDT05UUk9MTEVSIChzZWUgbWFudWFsIGNoYXB0ZXIgMTUpICovCi1zdHJ1Y3QgczNjMjR4MF9sY2QgewotCVMzQzI0WDBfUkVHMzIJTENEQ09OMTsKLQlTM0MyNFgwX1JFRzMyCUxDRENPTjI7Ci0JUzNDMjRYMF9SRUczMglMQ0RDT04zOwotCVMzQzI0WDBfUkVHMzIJTENEQ09ONDsKLQlTM0MyNFgwX1JFRzMyCUxDRENPTjU7Ci0JUzNDMjRYMF9SRUczMglMQ0RTQUREUjE7Ci0JUzNDMjRYMF9SRUczMglMQ0RTQUREUjI7Ci0JUzNDMjRYMF9SRUczMglMQ0RTQUREUjM7Ci0JUzNDMjRYMF9SRUczMglSRURMVVQ7Ci0JUzNDMjRYMF9SRUczMglHUkVFTkxVVDsKLQlTM0MyNFgwX1JFRzMyCUJMVUVMVVQ7Ci0JUzNDMjRYMF9SRUczMglyZXNbOF07Ci0JUzNDMjRYMF9SRUczMglESVRITU9ERTsKLQlTM0MyNFgwX1JFRzMyCVRQQUw7Ci0jaWZkZWYgQ09ORklHX1MzQzI0MTAKLQlTM0MyNFgwX1JFRzMyCUxDRElOVFBORDsKLQlTM0MyNFgwX1JFRzMyCUxDRFNSQ1BORDsKLQlTM0MyNFgwX1JFRzMyCUxDRElOVE1TSzsKLQlTM0MyNFgwX1JFRzMyCUxQQ1NFTDsKLSNlbmRpZgotfTsKLQotCi0vKiBOQU5EIEZMQVNIIChzZWUgUzNDMjQxMCBtYW51YWwgY2hhcHRlciA2KSAqLwotc3RydWN0IHMzYzI0MTBfbmFuZCB7Ci0JUzNDMjRYMF9SRUczMglORkNPTkY7Ci0JUzNDMjRYMF9SRUczMglORkNNRDsKLQlTM0MyNFgwX1JFRzMyCU5GQUREUjsKLQlTM0MyNFgwX1JFRzMyCU5GREFUQTsKLQlTM0MyNFgwX1JFRzMyCU5GU1RBVDsKLQlTM0MyNFgwX1JFRzMyCU5GRUNDOwotfTsKLQotCi0vKiBVQVJUIChzZWUgbWFudWFsIGNoYXB0ZXIgMTEpICovCi1zdHJ1Y3QgczNjMjR4MF91YXJ0IHsKLQlTM0MyNFgwX1JFRzMyCVVMQ09OOwotCVMzQzI0WDBfUkVHMzIJVUNPTjsKLQlTM0MyNFgwX1JFRzMyCVVGQ09OOwotCVMzQzI0WDBfUkVHMzIJVU1DT047Ci0JUzNDMjRYMF9SRUczMglVVFJTVEFUOwotCVMzQzI0WDBfUkVHMzIJVUVSU1RBVDsKLQlTM0MyNFgwX1JFRzMyCVVGU1RBVDsKLQlTM0MyNFgwX1JFRzMyCVVNU1RBVDsKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQlTM0MyNFgwX1JFRzgJcmVzMVszXTsKLQlTM0MyNFgwX1JFRzgJVVRYSDsKLQlTM0MyNFgwX1JFRzgJcmVzMlszXTsKLQlTM0MyNFgwX1JFRzgJVVJYSDsKLSNlbHNlIC8qIExpdHRsZSBFbmRpYW4gKi8KLQlTM0MyNFgwX1JFRzgJVVRYSDsKLQlTM0MyNFgwX1JFRzgJcmVzMVszXTsKLQlTM0MyNFgwX1JFRzgJVVJYSDsKLQlTM0MyNFgwX1JFRzgJcmVzMlszXTsKLSNlbmRpZgotCVMzQzI0WDBfUkVHMzIJVUJSRElWOwotfTsKLQotCi0vKiBQV00gVElNRVIgKHNlZSBtYW51YWwgY2hhcHRlciAxMCkgKi8KLXN0cnVjdCBzM2MyNHgwX3RpbWVyIHsKLQlTM0MyNFgwX1JFRzMyCVRDTlRCOwotCVMzQzI0WDBfUkVHMzIJVENNUEI7Ci0JUzNDMjRYMF9SRUczMglUQ05UTzsKLX07Ci0KLXN0cnVjdCBzM2MyNHgwX3RpbWVycyB7Ci0JUzNDMjRYMF9SRUczMgkJVENGRzA7Ci0JUzNDMjRYMF9SRUczMgkJVENGRzE7Ci0JUzNDMjRYMF9SRUczMgkJVENPTjsKLQlzdHJ1Y3QgczNjMjR4MF90aW1lcgljaFs0XTsKLQlTM0MyNFgwX1JFRzMyCQlUQ05UQjQ7Ci0JUzNDMjRYMF9SRUczMgkJVENOVE80OwotfTsKLQotCi0vKiBVU0IgREVWSUNFIChzZWUgbWFudWFsIGNoYXB0ZXIgMTMpICovCi1zdHJ1Y3QgczNjMjR4MF91c2JfZGV2X2ZpZm9zIHsKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQlTM0MyNFgwX1JFRzgJcmVzWzNdOwotCVMzQzI0WDBfUkVHOAlFUF9GSUZPX1JFRzsKLSNlbHNlIC8qICBsaXR0bGUgZW5kaWFuICovCi0JUzNDMjRYMF9SRUc4CUVQX0ZJRk9fUkVHOwotCVMzQzI0WDBfUkVHOAlyZXNbM107Ci0jZW5kaWYKLX07Ci0KLXN0cnVjdCBzM2MyNHgwX3VzYl9kZXZfZG1hcyB7Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JUzNDMjRYMF9SRUc4CXJlczFbM107Ci0JUzNDMjRYMF9SRUc4CUVQX0RNQV9DT047Ci0JUzNDMjRYMF9SRUc4CXJlczJbM107Ci0JUzNDMjRYMF9SRUc4CUVQX0RNQV9VTklUOwotCVMzQzI0WDBfUkVHOAlyZXMzWzNdOwotCVMzQzI0WDBfUkVHOAlFUF9ETUFfRklGTzsKLQlTM0MyNFgwX1JFRzgJcmVzNFszXTsKLQlTM0MyNFgwX1JFRzgJRVBfRE1BX1RUQ19MOwotCVMzQzI0WDBfUkVHOAlyZXM1WzNdOwotCVMzQzI0WDBfUkVHOAlFUF9ETUFfVFRDX007Ci0JUzNDMjRYMF9SRUc4CXJlczZbM107Ci0JUzNDMjRYMF9SRUc4CUVQX0RNQV9UVENfSDsKLSNlbHNlIC8qICBsaXR0bGUgZW5kaWFuICovCi0JUzNDMjRYMF9SRUc4CUVQX0RNQV9DT047Ci0JUzNDMjRYMF9SRUc4CXJlczFbM107Ci0JUzNDMjRYMF9SRUc4CUVQX0RNQV9VTklUOwotCVMzQzI0WDBfUkVHOAlyZXMyWzNdOwotCVMzQzI0WDBfUkVHOAlFUF9ETUFfRklGTzsKLQlTM0MyNFgwX1JFRzgJcmVzM1szXTsKLQlTM0MyNFgwX1JFRzgJRVBfRE1BX1RUQ19MOwotCVMzQzI0WDBfUkVHOAlyZXM0WzNdOwotCVMzQzI0WDBfUkVHOAlFUF9ETUFfVFRDX007Ci0JUzNDMjRYMF9SRUc4CXJlczVbM107Ci0JUzNDMjRYMF9SRUc4CUVQX0RNQV9UVENfSDsKLQlTM0MyNFgwX1JFRzgJcmVzNlszXTsKLSNlbmRpZgotfTsKLQotc3RydWN0IHMzYzI0eDBfdXNiX2RldmljZSB7Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JUzNDMjRYMF9SRUc4CXJlczFbM107Ci0JUzNDMjRYMF9SRUc4CUZVTkNfQUREUl9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczJbM107Ci0JUzNDMjRYMF9SRUc4CVBXUl9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczNbM107Ci0JUzNDMjRYMF9SRUc4CUVQX0lOVF9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczRbMTVdOwotCVMzQzI0WDBfUkVHOAlVU0JfSU5UX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzNVszXTsKLQlTM0MyNFgwX1JFRzgJRVBfSU5UX0VOX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzNlsxNV07Ci0JUzNDMjRYMF9SRUc4CVVTQl9JTlRfRU5fUkVHOwotCVMzQzI0WDBfUkVHOAlyZXM3WzNdOwotCVMzQzI0WDBfUkVHOAlGUkFNRV9OVU0xX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzOFszXTsKLQlTM0MyNFgwX1JFRzgJRlJBTUVfTlVNMl9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczlbM107Ci0JUzNDMjRYMF9SRUc4CUlOREVYX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzMTBbN107Ci0JUzNDMjRYMF9SRUc4CU1BWFBfUkVHOwotCVMzQzI0WDBfUkVHOAlyZXMxMVszXTsKLQlTM0MyNFgwX1JFRzgJRVAwX0NTUl9JTl9DU1IxX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzMTJbM107Ci0JUzNDMjRYMF9SRUc4CUlOX0NTUjJfUkVHOwotCVMzQzI0WDBfUkVHOAlyZXMxM1s3XTsKLQlTM0MyNFgwX1JFRzgJT1VUX0NTUjFfUkVHOwotCVMzQzI0WDBfUkVHOAlyZXMxNFszXTsKLQlTM0MyNFgwX1JFRzgJT1VUX0NTUjJfUkVHOwotCVMzQzI0WDBfUkVHOAlyZXMxNVszXTsKLQlTM0MyNFgwX1JFRzgJT1VUX0ZJRk9fQ05UMV9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczE2WzNdOwotCVMzQzI0WDBfUkVHOAlPVVRfRklGT19DTlQyX1JFRzsKLSNlbHNlIC8qICBsaXR0bGUgZW5kaWFuICovCi0JUzNDMjRYMF9SRUc4CUZVTkNfQUREUl9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczFbM107Ci0JUzNDMjRYMF9SRUc4CVBXUl9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczJbM107Ci0JUzNDMjRYMF9SRUc4CUVQX0lOVF9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczNbMTVdOwotCVMzQzI0WDBfUkVHOAlVU0JfSU5UX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzNFszXTsKLQlTM0MyNFgwX1JFRzgJRVBfSU5UX0VOX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzNVsxNV07Ci0JUzNDMjRYMF9SRUc4CVVTQl9JTlRfRU5fUkVHOwotCVMzQzI0WDBfUkVHOAlyZXM2WzNdOwotCVMzQzI0WDBfUkVHOAlGUkFNRV9OVU0xX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzN1szXTsKLQlTM0MyNFgwX1JFRzgJRlJBTUVfTlVNMl9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczhbM107Ci0JUzNDMjRYMF9SRUc4CUlOREVYX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzOVs3XTsKLQlTM0MyNFgwX1JFRzgJTUFYUF9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczEwWzddOwotCVMzQzI0WDBfUkVHOAlFUDBfQ1NSX0lOX0NTUjFfUkVHOwotCVMzQzI0WDBfUkVHOAlyZXMxMVszXTsKLQlTM0MyNFgwX1JFRzgJSU5fQ1NSMl9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczEyWzNdOwotCVMzQzI0WDBfUkVHOAlPVVRfQ1NSMV9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczEzWzddOwotCVMzQzI0WDBfUkVHOAlPVVRfQ1NSMl9SRUc7Ci0JUzNDMjRYMF9SRUc4CXJlczE0WzNdOwotCVMzQzI0WDBfUkVHOAlPVVRfRklGT19DTlQxX1JFRzsKLQlTM0MyNFgwX1JFRzgJcmVzMTVbM107Ci0JUzNDMjRYMF9SRUc4CU9VVF9GSUZPX0NOVDJfUkVHOwotCVMzQzI0WDBfUkVHOAlyZXMxNlszXTsKLSNlbmRpZiAvKiAgX19CSUdfRU5ESUFOICovCi0Jc3RydWN0IHMzYzI0eDBfdXNiX2Rldl9maWZvcwlmaWZvWzVdOwotCXN0cnVjdCBzM2MyNHgwX3VzYl9kZXZfZG1hcwlkbWFbNV07Ci19OwotCi0KLS8qIFdBVENIIERPRyBUSU1FUiAoc2VlIG1hbnVhbCBjaGFwdGVyIDE4KSAqLwotc3RydWN0IHMzYzI0eDBfd2F0Y2hkb2cgewotCVMzQzI0WDBfUkVHMzIJV1RDT047Ci0JUzNDMjRYMF9SRUczMglXVERBVDsKLQlTM0MyNFgwX1JFRzMyCVdUQ05UOwotfTsKLQotCi0vKiBJSUMgKHNlZSBtYW51YWwgY2hhcHRlciAyMCkgKi8KLXN0cnVjdCBzM2MyNHgwX2kyYyB7Ci0JUzNDMjRYMF9SRUczMglJSUNDT047Ci0JUzNDMjRYMF9SRUczMglJSUNTVEFUOwotCVMzQzI0WDBfUkVHMzIJSUlDQUREOwotCVMzQzI0WDBfUkVHMzIJSUlDRFM7Ci19OwotCi0KLS8qIElJUyAoc2VlIG1hbnVhbCBjaGFwdGVyIDIxKSAqLwotc3RydWN0IHMzYzI0eDBfaTJzIHsKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQlTM0MyNFgwX1JFRzE2CXJlczE7Ci0JUzNDMjRYMF9SRUcxNglJSVNDT047Ci0JUzNDMjRYMF9SRUcxNglyZXMyOwotCVMzQzI0WDBfUkVHMTYJSUlTTU9EOwotCVMzQzI0WDBfUkVHMTYJcmVzMzsKLQlTM0MyNFgwX1JFRzE2CUlJU1BTUjsKLQlTM0MyNFgwX1JFRzE2CXJlczQ7Ci0JUzNDMjRYMF9SRUcxNglJSVNGQ09OOwotCVMzQzI0WDBfUkVHMTYJcmVzNTsKLQlTM0MyNFgwX1JFRzE2CUlJU0ZJRk87Ci0jZWxzZSAvKiAgbGl0dGxlIGVuZGlhbiAqLwotCVMzQzI0WDBfUkVHMTYJSUlTQ09OOwotCVMzQzI0WDBfUkVHMTYJcmVzMTsKLQlTM0MyNFgwX1JFRzE2CUlJU01PRDsKLQlTM0MyNFgwX1JFRzE2CXJlczI7Ci0JUzNDMjRYMF9SRUcxNglJSVNQU1I7Ci0JUzNDMjRYMF9SRUcxNglyZXMzOwotCVMzQzI0WDBfUkVHMTYJSUlTRkNPTjsKLQlTM0MyNFgwX1JFRzE2CXJlczQ7Ci0JUzNDMjRYMF9SRUcxNglJSVNGSUZPOwotCVMzQzI0WDBfUkVHMTYJcmVzNTsKLSNlbmRpZgotfTsKLQotCi0vKiBJL08gUE9SVCAoc2VlIG1hbnVhbCBjaGFwdGVyIDkpICovCi1zdHJ1Y3QgczNjMjR4MF9ncGlvIHsKLSNpZmRlZiBDT05GSUdfUzNDMjQwMAotCVMzQzI0WDBfUkVHMzIJUEFDT047Ci0JUzNDMjRYMF9SRUczMglQQURBVDsKLQotCVMzQzI0WDBfUkVHMzIJUEJDT047Ci0JUzNDMjRYMF9SRUczMglQQkRBVDsKLQlTM0MyNFgwX1JFRzMyCVBCVVA7Ci0KLQlTM0MyNFgwX1JFRzMyCVBDQ09OOwotCVMzQzI0WDBfUkVHMzIJUENEQVQ7Ci0JUzNDMjRYMF9SRUczMglQQ1VQOwotCi0JUzNDMjRYMF9SRUczMglQRENPTjsKLQlTM0MyNFgwX1JFRzMyCVBEREFUOwotCVMzQzI0WDBfUkVHMzIJUERVUDsKLQotCVMzQzI0WDBfUkVHMzIJUEVDT047Ci0JUzNDMjRYMF9SRUczMglQRURBVDsKLQlTM0MyNFgwX1JFRzMyCVBFVVA7Ci0KLQlTM0MyNFgwX1JFRzMyCVBGQ09OOwotCVMzQzI0WDBfUkVHMzIJUEZEQVQ7Ci0JUzNDMjRYMF9SRUczMglQRlVQOwotCi0JUzNDMjRYMF9SRUczMglQR0NPTjsKLQlTM0MyNFgwX1JFRzMyCVBHREFUOwotCVMzQzI0WDBfUkVHMzIJUEdVUDsKLQotCVMzQzI0WDBfUkVHMzIJT1BFTkNSOwotCi0JUzNDMjRYMF9SRUczMglNSVNDQ1I7Ci0JUzNDMjRYMF9SRUczMglFWFRJTlQ7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUzNDMjQxMAotCVMzQzI0WDBfUkVHMzIJR1BBQ09OOwotCVMzQzI0WDBfUkVHMzIJR1BBREFUOwotCVMzQzI0WDBfUkVHMzIJcmVzMVsyXTsKLQlTM0MyNFgwX1JFRzMyCUdQQkNPTjsKLQlTM0MyNFgwX1JFRzMyCUdQQkRBVDsKLQlTM0MyNFgwX1JFRzMyCUdQQlVQOwotCVMzQzI0WDBfUkVHMzIJcmVzMjsKLQlTM0MyNFgwX1JFRzMyCUdQQ0NPTjsKLQlTM0MyNFgwX1JFRzMyCUdQQ0RBVDsKLQlTM0MyNFgwX1JFRzMyCUdQQ1VQOwotCVMzQzI0WDBfUkVHMzIJcmVzMzsKLQlTM0MyNFgwX1JFRzMyCUdQRENPTjsKLQlTM0MyNFgwX1JFRzMyCUdQRERBVDsKLQlTM0MyNFgwX1JFRzMyCUdQRFVQOwotCVMzQzI0WDBfUkVHMzIJcmVzNDsKLQlTM0MyNFgwX1JFRzMyCUdQRUNPTjsKLQlTM0MyNFgwX1JFRzMyCUdQRURBVDsKLQlTM0MyNFgwX1JFRzMyCUdQRVVQOwotCVMzQzI0WDBfUkVHMzIJcmVzNTsKLQlTM0MyNFgwX1JFRzMyCUdQRkNPTjsKLQlTM0MyNFgwX1JFRzMyCUdQRkRBVDsKLQlTM0MyNFgwX1JFRzMyCUdQRlVQOwotCVMzQzI0WDBfUkVHMzIJcmVzNjsKLQlTM0MyNFgwX1JFRzMyCUdQR0NPTjsKLQlTM0MyNFgwX1JFRzMyCUdQR0RBVDsKLQlTM0MyNFgwX1JFRzMyCUdQR1VQOwotCVMzQzI0WDBfUkVHMzIJcmVzNzsKLQlTM0MyNFgwX1JFRzMyCUdQSENPTjsKLQlTM0MyNFgwX1JFRzMyCUdQSERBVDsKLQlTM0MyNFgwX1JFRzMyCUdQSFVQOwotCVMzQzI0WDBfUkVHMzIJcmVzODsKLQotCVMzQzI0WDBfUkVHMzIJTUlTQ0NSOwotCVMzQzI0WDBfUkVHMzIJRENMS0NPTjsKLQlTM0MyNFgwX1JFRzMyCUVYVElOVDA7Ci0JUzNDMjRYMF9SRUczMglFWFRJTlQxOwotCVMzQzI0WDBfUkVHMzIJRVhUSU5UMjsKLQlTM0MyNFgwX1JFRzMyCUVJTlRGTFQwOwotCVMzQzI0WDBfUkVHMzIJRUlOVEZMVDE7Ci0JUzNDMjRYMF9SRUczMglFSU5URkxUMjsKLQlTM0MyNFgwX1JFRzMyCUVJTlRGTFQzOwotCVMzQzI0WDBfUkVHMzIJRUlOVE1BU0s7Ci0JUzNDMjRYMF9SRUczMglFSU5UUEVORDsKLQlTM0MyNFgwX1JFRzMyCUdTVEFUVVMwOwotCVMzQzI0WDBfUkVHMzIJR1NUQVRVUzE7Ci0JUzNDMjRYMF9SRUczMglHU1RBVFVTMjsKLQlTM0MyNFgwX1JFRzMyCUdTVEFUVVMzOwotCVMzQzI0WDBfUkVHMzIJR1NUQVRVUzQ7Ci0jZW5kaWYKLX07Ci0KLQotLyogUlRDIChzZWUgbWFudWFsIGNoYXB0ZXIgMTcpICovCi1zdHJ1Y3QgczNjMjR4MF9ydGMgewotI2lmZGVmIF9fQklHX0VORElBTgotCVMzQzI0WDBfUkVHOAlyZXMxWzY3XTsKLQlTM0MyNFgwX1JFRzgJUlRDQ09OOwotCVMzQzI0WDBfUkVHOAlyZXMyWzNdOwotCVMzQzI0WDBfUkVHOAlUSUNOVDsKLQlTM0MyNFgwX1JFRzgJcmVzM1sxMV07Ci0JUzNDMjRYMF9SRUc4CVJUQ0FMTTsKLQlTM0MyNFgwX1JFRzgJcmVzNFszXTsKLQlTM0MyNFgwX1JFRzgJQUxNU0VDOwotCVMzQzI0WDBfUkVHOAlyZXM1WzNdOwotCVMzQzI0WDBfUkVHOAlBTE1NSU47Ci0JUzNDMjRYMF9SRUc4CXJlczZbM107Ci0JUzNDMjRYMF9SRUc4CUFMTUhPVVI7Ci0JUzNDMjRYMF9SRUc4CXJlczdbM107Ci0JUzNDMjRYMF9SRUc4CUFMTURBVEU7Ci0JUzNDMjRYMF9SRUc4CXJlczhbM107Ci0JUzNDMjRYMF9SRUc4CUFMTU1PTjsKLQlTM0MyNFgwX1JFRzgJcmVzOVszXTsKLQlTM0MyNFgwX1JFRzgJQUxNWUVBUjsKLQlTM0MyNFgwX1JFRzgJcmVzMTBbM107Ci0JUzNDMjRYMF9SRUc4CVJUQ1JTVDsKLQlTM0MyNFgwX1JFRzgJcmVzMTFbM107Ci0JUzNDMjRYMF9SRUc4CUJDRFNFQzsKLQlTM0MyNFgwX1JFRzgJcmVzMTJbM107Ci0JUzNDMjRYMF9SRUc4CUJDRE1JTjsKLQlTM0MyNFgwX1JFRzgJcmVzMTNbM107Ci0JUzNDMjRYMF9SRUc4CUJDREhPVVI7Ci0JUzNDMjRYMF9SRUc4CXJlczE0WzNdOwotCVMzQzI0WDBfUkVHOAlCQ0REQVRFOwotCVMzQzI0WDBfUkVHOAlyZXMxNVszXTsKLQlTM0MyNFgwX1JFRzgJQkNEREFZOwotCVMzQzI0WDBfUkVHOAlyZXMxNlszXTsKLQlTM0MyNFgwX1JFRzgJQkNETU9OOwotCVMzQzI0WDBfUkVHOAlyZXMxN1szXTsKLQlTM0MyNFgwX1JFRzgJQkNEWUVBUjsKLSNlbHNlIC8qICBsaXR0bGUgZW5kaWFuICovCi0JUzNDMjRYMF9SRUc4CXJlczBbNjRdOwotCVMzQzI0WDBfUkVHOAlSVENDT047Ci0JUzNDMjRYMF9SRUc4CXJlczFbM107Ci0JUzNDMjRYMF9SRUc4CVRJQ05UOwotCVMzQzI0WDBfUkVHOAlyZXMyWzExXTsKLQlTM0MyNFgwX1JFRzgJUlRDQUxNOwotCVMzQzI0WDBfUkVHOAlyZXMzWzNdOwotCVMzQzI0WDBfUkVHOAlBTE1TRUM7Ci0JUzNDMjRYMF9SRUc4CXJlczRbM107Ci0JUzNDMjRYMF9SRUc4CUFMTU1JTjsKLQlTM0MyNFgwX1JFRzgJcmVzNVszXTsKLQlTM0MyNFgwX1JFRzgJQUxNSE9VUjsKLQlTM0MyNFgwX1JFRzgJcmVzNlszXTsKLQlTM0MyNFgwX1JFRzgJQUxNREFURTsKLQlTM0MyNFgwX1JFRzgJcmVzN1szXTsKLQlTM0MyNFgwX1JFRzgJQUxNTU9OOwotCVMzQzI0WDBfUkVHOAlyZXM4WzNdOwotCVMzQzI0WDBfUkVHOAlBTE1ZRUFSOwotCVMzQzI0WDBfUkVHOAlyZXM5WzNdOwotCVMzQzI0WDBfUkVHOAlSVENSU1Q7Ci0JUzNDMjRYMF9SRUc4CXJlczEwWzNdOwotCVMzQzI0WDBfUkVHOAlCQ0RTRUM7Ci0JUzNDMjRYMF9SRUc4CXJlczExWzNdOwotCVMzQzI0WDBfUkVHOAlCQ0RNSU47Ci0JUzNDMjRYMF9SRUc4CXJlczEyWzNdOwotCVMzQzI0WDBfUkVHOAlCQ0RIT1VSOwotCVMzQzI0WDBfUkVHOAlyZXMxM1szXTsKLQlTM0MyNFgwX1JFRzgJQkNEREFURTsKLQlTM0MyNFgwX1JFRzgJcmVzMTRbM107Ci0JUzNDMjRYMF9SRUc4CUJDRERBWTsKLQlTM0MyNFgwX1JFRzgJcmVzMTVbM107Ci0JUzNDMjRYMF9SRUc4CUJDRE1PTjsKLQlTM0MyNFgwX1JFRzgJcmVzMTZbM107Ci0JUzNDMjRYMF9SRUc4CUJDRFlFQVI7Ci0JUzNDMjRYMF9SRUc4CXJlczE3WzNdOwotI2VuZGlmCi19OwotCi0KLS8qIEFEQyAoc2VlIG1hbnVhbCBjaGFwdGVyIDE2KSAqLwotc3RydWN0IHMzYzI0MDBfYWRjIHsKLQlTM0MyNFgwX1JFRzMyCUFEQ0NPTjsKLQlTM0MyNFgwX1JFRzMyCUFEQ0RBVDsKLX07Ci0KLQotLyogQURDIChzZWUgbWFudWFsIGNoYXB0ZXIgMTYpICovCi1zdHJ1Y3QgczNjMjQxMF9hZGMgewotCVMzQzI0WDBfUkVHMzIJQURDQ09OOwotCVMzQzI0WDBfUkVHMzIJQURDVFNDOwotCVMzQzI0WDBfUkVHMzIJQURDRExZOwotCVMzQzI0WDBfUkVHMzIJQURDREFUMDsKLQlTM0MyNFgwX1JFRzMyCUFEQ0RBVDE7Ci19OwotCi0KLS8qIFNQSSAoc2VlIG1hbnVhbCBjaGFwdGVyIDIyKSAqLwotc3RydWN0IHMzYzI0eDBfc3BpX2NoYW5uZWwgewotCVMzQzI0WDBfUkVHOAlTUENPTjsKLQlTM0MyNFgwX1JFRzgJcmVzMVszXTsKLQlTM0MyNFgwX1JFRzgJU1BTVEE7Ci0JUzNDMjRYMF9SRUc4CXJlczJbM107Ci0JUzNDMjRYMF9SRUc4CVNQUElOOwotCVMzQzI0WDBfUkVHOAlyZXMzWzNdOwotCVMzQzI0WDBfUkVHOAlTUFBSRTsKLQlTM0MyNFgwX1JFRzgJcmVzNFszXTsKLQlTM0MyNFgwX1JFRzgJU1BUREFUOwotCVMzQzI0WDBfUkVHOAlyZXM1WzNdOwotCVMzQzI0WDBfUkVHOAlTUFJEQVQ7Ci0JUzNDMjRYMF9SRUc4CXJlczZbM107Ci0JUzNDMjRYMF9SRUc4CXJlczdbMTZdOwotfTsKLQotc3RydWN0IHMzYzI0eDBfc3BpIHsKLQlzdHJ1Y3QgczNjMjR4MF9zcGlfY2hhbm5lbAljaFtTM0MyNFgwX1NQSV9DSEFOTkVMU107Ci19OwotCi0KLS8qIE1NQyBJTlRFUkZBQ0UgKHNlZSBTM0MyNDAwIG1hbnVhbCBjaGFwdGVyIDE5KSAqLwotc3RydWN0IHMzYzI0MDBfbW1jIHsKLSNpZmRlZiBfX0JJR19FTkRJQU4KLQlTM0MyNFgwX1JFRzgJcmVzMVszXTsKLQlTM0MyNFgwX1JFRzgJTU1DT047Ci0JUzNDMjRYMF9SRUc4CXJlczJbM107Ci0JUzNDMjRYMF9SRUc4CU1NQ1JSOwotCVMzQzI0WDBfUkVHOAlyZXMzWzNdOwotCVMzQzI0WDBfUkVHOAlNTUZDT047Ci0JUzNDMjRYMF9SRUc4CXJlczRbM107Ci0JUzNDMjRYMF9SRUc4CU1NU1RBOwotCVMzQzI0WDBfUkVHMTYJcmVzNTsKLQlTM0MyNFgwX1JFRzE2CU1NRlNUQTsKLQlTM0MyNFgwX1JFRzgJcmVzNlszXTsKLQlTM0MyNFgwX1JFRzgJTU1QUkU7Ci0JUzNDMjRYMF9SRUcxNglyZXM3OwotCVMzQzI0WDBfUkVHMTYJTU1MRU47Ci0JUzNDMjRYMF9SRUc4CXJlczhbM107Ci0JUzNDMjRYMF9SRUc4CU1NQ1I3OwotCVMzQzI0WDBfUkVHMzIJTU1SU1BbNF07Ci0JUzNDMjRYMF9SRUc4CXJlczlbM107Ci0JUzNDMjRYMF9SRUc4CU1NQ01EMDsKLQlTM0MyNFgwX1JFRzMyCU1NQ01EMTsKLQlTM0MyNFgwX1JFRzE2CXJlczEwOwotCVMzQzI0WDBfUkVHMTYJTU1DUjE2OwotCVMzQzI0WDBfUkVHOAlyZXMxMVszXTsKLQlTM0MyNFgwX1JFRzgJTU1EQVQ7Ci0jZWxzZQotCVMzQzI0WDBfUkVHOAlNTUNPTjsKLQlTM0MyNFgwX1JFRzgJcmVzMVszXTsKLQlTM0MyNFgwX1JFRzgJTU1DUlI7Ci0JUzNDMjRYMF9SRUc4CXJlczJbM107Ci0JUzNDMjRYMF9SRUc4CU1NRkNPTjsKLQlTM0MyNFgwX1JFRzgJcmVzM1szXTsKLQlTM0MyNFgwX1JFRzgJTU1TVEE7Ci0JUzNDMjRYMF9SRUc4CXJlczRbM107Ci0JUzNDMjRYMF9SRUcxNglNTUZTVEE7Ci0JUzNDMjRYMF9SRUcxNglyZXM1OwotCVMzQzI0WDBfUkVHOAlNTVBSRTsKLQlTM0MyNFgwX1JFRzgJcmVzNlszXTsKLQlTM0MyNFgwX1JFRzE2CU1NTEVOOwotCVMzQzI0WDBfUkVHMTYJcmVzNzsKLQlTM0MyNFgwX1JFRzgJTU1DUjc7Ci0JUzNDMjRYMF9SRUc4CXJlczhbM107Ci0JUzNDMjRYMF9SRUczMglNTVJTUFs0XTsKLQlTM0MyNFgwX1JFRzgJTU1DTUQwOwotCVMzQzI0WDBfUkVHOAlyZXM5WzNdOwotCVMzQzI0WDBfUkVHMzIJTU1DTUQxOwotCVMzQzI0WDBfUkVHMTYJTU1DUjE2OwotCVMzQzI0WDBfUkVHMTYJcmVzMTA7Ci0JUzNDMjRYMF9SRUc4CU1NREFUOwotCVMzQzI0WDBfUkVHOAlyZXMxMVszXTsKLSNlbmRpZgotfTsKLQotCi0vKiBTRCBJTlRFUkZBQ0UgKHNlZSBTM0MyNDEwIG1hbnVhbCBjaGFwdGVyIDE5KSAqLwotc3RydWN0IHMzYzI0MTBfc2RpIHsKLQlTM0MyNFgwX1JFRzMyCVNESUNPTjsKLQlTM0MyNFgwX1JFRzMyCVNESVBSRTsKLQlTM0MyNFgwX1JFRzMyCVNESUNBUkc7Ci0JUzNDMjRYMF9SRUczMglTRElDQ09OOwotCVMzQzI0WDBfUkVHMzIJU0RJQ1NUQTsKLQlTM0MyNFgwX1JFRzMyCVNESVJTUDA7Ci0JUzNDMjRYMF9SRUczMglTRElSU1AxOwotCVMzQzI0WDBfUkVHMzIJU0RJUlNQMjsKLQlTM0MyNFgwX1JFRzMyCVNESVJTUDM7Ci0JUzNDMjRYMF9SRUczMglTRElEVElNRVI7Ci0JUzNDMjRYMF9SRUczMglTRElCU0laRTsKLQlTM0MyNFgwX1JFRzMyCVNESURDT047Ci0JUzNDMjRYMF9SRUczMglTRElEQ05UOwotCVMzQzI0WDBfUkVHMzIJU0RJRFNUQTsKLQlTM0MyNFgwX1JFRzMyCVNESUZTVEE7Ci0jaWZkZWYgX19CSUdfRU5ESUFOCi0JUzNDMjRYMF9SRUc4CXJlc1szXTsKLQlTM0MyNFgwX1JFRzgJU0RJREFUOwotI2Vsc2UKLQlTM0MyNFgwX1JFRzgJU0RJREFUOwotCVMzQzI0WDBfUkVHOAlyZXNbM107Ci0jZW5kaWYKLQlTM0MyNFgwX1JFRzMyCVNESUlNU0s7Ci19OwotCi0jZW5kaWYgLypfX1MzQzI0WDBfSF9fKi8KZGlmZiAtLWdpdCBhL2xpYl9nZW5lcmljL01ha2VmaWxlIGIvbGliX2dlbmVyaWMvTWFrZWZpbGUKaW5kZXggMmVjMjYxYS4uYmZhZjM0NiAxMDA2NDQKLS0tIGEvbGliX2dlbmVyaWMvTWFrZWZpbGUKKysrIGIvbGliX2dlbmVyaWMvTWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDcgQEAKIENPQkpTLSQoQ09ORklHX1NIQTI1NikgKz0gc2hhMjU2Lm8KIENPQkpTLXkgKz0gc3RyaW5nLm8KIENPQkpTLXkJKz0gc3RybWh6Lm8KK0NPQkpTLXkgKz0gdGltZS5vCiBDT0JKUy15ICs9IHZzcHJpbnRmLm8KIENPQkpTLXkgKz0gemxpYi5vCiBDT0JKUy0kKENPTkZJR19SQlRSRUUpCSs9IHJidHJlZS5vCmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy9jcmMzMi5jIGIvbGliX2dlbmVyaWMvY3JjMzIuYwppbmRleCBiMjcwNDhjLi40NjhiMzk3IDEwMDY0NAotLS0gYS9saWJfZ2VuZXJpYy9jcmMzMi5jCisrKyBiL2xpYl9nZW5lcmljL2NyYzMyLmMKQEAgLTgsMTEgKzgsMTEgQEAKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCi0jaWZuZGVmIFVTRV9IT1NUQ0MJLyogU2h1dCBkb3duICJBTlNJIGRvZXMgbm90IHBlcm1pdC4uLiIgd2FybmluZ3MgKi8KKyNpZm5kZWYgVVNFX0hPU1RDQwogI2luY2x1ZGUgPGNvbW1vbi5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdGRpbnQuaD4KICNlbmRpZgorI2luY2x1ZGUgPGNvbXBpbGVyLmg+CisjaW5jbHVkZSA8dS1ib290L2NyYy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfSFdfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX1dBVENIRE9HKQogI2luY2x1ZGUgPHdhdGNoZG9nLmg+CkBAIC0yMiw2ICsyMiw4IEBACiAjZGVmaW5lIGxvY2FsIHN0YXRpYwogI2RlZmluZSBaRVhQT1JUCS8qIGVtcHR5ICovCiAKKyNkZWZpbmUgdG9sZSh4KSBjcHVfdG9fbGUzMih4KQorCiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKIAogbG9jYWwgaW50IGNyY190YWJsZV9lbXB0eSA9IDE7CkBAIC03MCw3ICs3Miw3IEBACiAgICAgYyA9ICh1TG9uZyluOwogICAgIGZvciAoayA9IDA7IGsgPCA4OyBrKyspCiAgICAgICBjID0gYyAmIDEgPyBwb2x5IF4gKGMgPj4gMSkgOiBjID4+IDE7Ci0gICAgY3JjX3RhYmxlW25dID0gYzsKKyAgICBjcmNfdGFibGVbbl0gPSB0b2xlKGMpOwogICB9CiAgIGNyY190YWJsZV9lbXB0eSA9IDA7CiB9CkBAIC03OCw1OSArODAsNzIgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGFibGUgb2YgQ1JDLTMyJ3Mgb2YgYWxsIHNpbmdsZS1ieXRlIHZhbHVlcyAobWFkZSBieSBtYWtlX2NyY190YWJsZSkKICAqLworCiBsb2NhbCBjb25zdCB1aW50MzJfdCBjcmNfdGFibGVbMjU2XSA9IHsKLSAgMHgwMDAwMDAwMEwsIDB4NzcwNzMwOTZMLCAweGVlMGU2MTJjTCwgMHg5OTA5NTFiYUwsIDB4MDc2ZGM0MTlMLAotICAweDcwNmFmNDhmTCwgMHhlOTYzYTUzNUwsIDB4OWU2NDk1YTNMLCAweDBlZGI4ODMyTCwgMHg3OWRjYjhhNEwsCi0gIDB4ZTBkNWU5MWVMLCAweDk3ZDJkOTg4TCwgMHgwOWI2NGMyYkwsIDB4N2ViMTdjYmRMLCAweGU3YjgyZDA3TCwKLSAgMHg5MGJmMWQ5MUwsIDB4MWRiNzEwNjRMLCAweDZhYjAyMGYyTCwgMHhmM2I5NzE0OEwsIDB4ODRiZTQxZGVMLAotICAweDFhZGFkNDdkTCwgMHg2ZGRkZTRlYkwsIDB4ZjRkNGI1NTFMLCAweDgzZDM4NWM3TCwgMHgxMzZjOTg1NkwsCi0gIDB4NjQ2YmE4YzBMLCAweGZkNjJmOTdhTCwgMHg4YTY1YzllY0wsIDB4MTQwMTVjNGZMLCAweDYzMDY2Y2Q5TCwKLSAgMHhmYTBmM2Q2M0wsIDB4OGQwODBkZjVMLCAweDNiNmUyMGM4TCwgMHg0YzY5MTA1ZUwsIDB4ZDU2MDQxZTRMLAotICAweGEyNjc3MTcyTCwgMHgzYzAzZTRkMUwsIDB4NGIwNGQ0NDdMLCAweGQyMGQ4NWZkTCwgMHhhNTBhYjU2YkwsCi0gIDB4MzViNWE4ZmFMLCAweDQyYjI5ODZjTCwgMHhkYmJiYzlkNkwsIDB4YWNiY2Y5NDBMLCAweDMyZDg2Y2UzTCwKLSAgMHg0NWRmNWM3NUwsIDB4ZGNkNjBkY2ZMLCAweGFiZDEzZDU5TCwgMHgyNmQ5MzBhY0wsIDB4NTFkZTAwM2FMLAotICAweGM4ZDc1MTgwTCwgMHhiZmQwNjExNkwsIDB4MjFiNGY0YjVMLCAweDU2YjNjNDIzTCwgMHhjZmJhOTU5OUwsCi0gIDB4YjhiZGE1MGZMLCAweDI4MDJiODllTCwgMHg1ZjA1ODgwOEwsIDB4YzYwY2Q5YjJMLCAweGIxMGJlOTI0TCwKLSAgMHgyZjZmN2M4N0wsIDB4NTg2ODRjMTFMLCAweGMxNjExZGFiTCwgMHhiNjY2MmQzZEwsIDB4NzZkYzQxOTBMLAotICAweDAxZGI3MTA2TCwgMHg5OGQyMjBiY0wsIDB4ZWZkNTEwMmFMLCAweDcxYjE4NTg5TCwgMHgwNmI2YjUxZkwsCi0gIDB4OWZiZmU0YTVMLCAweGU4YjhkNDMzTCwgMHg3ODA3YzlhMkwsIDB4MGYwMGY5MzRMLCAweDk2MDlhODhlTCwKLSAgMHhlMTBlOTgxOEwsIDB4N2Y2YTBkYmJMLCAweDA4NmQzZDJkTCwgMHg5MTY0NmM5N0wsIDB4ZTY2MzVjMDFMLAotICAweDZiNmI1MWY0TCwgMHgxYzZjNjE2MkwsIDB4ODU2NTMwZDhMLCAweGYyNjIwMDRlTCwgMHg2YzA2OTVlZEwsCi0gIDB4MWIwMWE1N2JMLCAweDgyMDhmNGMxTCwgMHhmNTBmYzQ1N0wsIDB4NjViMGQ5YzZMLCAweDEyYjdlOTUwTCwKLSAgMHg4YmJlYjhlYUwsIDB4ZmNiOTg4N2NMLCAweDYyZGQxZGRmTCwgMHgxNWRhMmQ0OUwsIDB4OGNkMzdjZjNMLAotICAweGZiZDQ0YzY1TCwgMHg0ZGIyNjE1OEwsIDB4M2FiNTUxY2VMLCAweGEzYmMwMDc0TCwgMHhkNGJiMzBlMkwsCi0gIDB4NGFkZmE1NDFMLCAweDNkZDg5NWQ3TCwgMHhhNGQxYzQ2ZEwsIDB4ZDNkNmY0ZmJMLCAweDQzNjllOTZhTCwKLSAgMHgzNDZlZDlmY0wsIDB4YWQ2Nzg4NDZMLCAweGRhNjBiOGQwTCwgMHg0NDA0MmQ3M0wsIDB4MzMwMzFkZTVMLAotICAweGFhMGE0YzVmTCwgMHhkZDBkN2NjOUwsIDB4NTAwNTcxM2NMLCAweDI3MDI0MWFhTCwgMHhiZTBiMTAxMEwsCi0gIDB4YzkwYzIwODZMLCAweDU3NjhiNTI1TCwgMHgyMDZmODViM0wsIDB4Yjk2NmQ0MDlMLCAweGNlNjFlNDlmTCwKLSAgMHg1ZWRlZjkwZUwsIDB4MjlkOWM5OThMLCAweGIwZDA5ODIyTCwgMHhjN2Q3YThiNEwsIDB4NTliMzNkMTdMLAotICAweDJlYjQwZDgxTCwgMHhiN2JkNWMzYkwsIDB4YzBiYTZjYWRMLCAweGVkYjg4MzIwTCwgMHg5YWJmYjNiNkwsCi0gIDB4MDNiNmUyMGNMLCAweDc0YjFkMjlhTCwgMHhlYWQ1NDczOUwsIDB4OWRkMjc3YWZMLCAweDA0ZGIyNjE1TCwKLSAgMHg3M2RjMTY4M0wsIDB4ZTM2MzBiMTJMLCAweDk0NjQzYjg0TCwgMHgwZDZkNmEzZUwsIDB4N2E2YTVhYThMLAotICAweGU0MGVjZjBiTCwgMHg5MzA5ZmY5ZEwsIDB4MGEwMGFlMjdMLCAweDdkMDc5ZWIxTCwgMHhmMDBmOTM0NEwsCi0gIDB4ODcwOGEzZDJMLCAweDFlMDFmMjY4TCwgMHg2OTA2YzJmZUwsIDB4Zjc2MjU3NWRMLCAweDgwNjU2N2NiTCwKLSAgMHgxOTZjMzY3MUwsIDB4NmU2YjA2ZTdMLCAweGZlZDQxYjc2TCwgMHg4OWQzMmJlMEwsIDB4MTBkYTdhNWFMLAotICAweDY3ZGQ0YWNjTCwgMHhmOWI5ZGY2ZkwsIDB4OGViZWVmZjlMLCAweDE3YjdiZTQzTCwgMHg2MGIwOGVkNUwsCi0gIDB4ZDZkNmEzZThMLCAweGExZDE5MzdlTCwgMHgzOGQ4YzJjNEwsIDB4NGZkZmYyNTJMLCAweGQxYmI2N2YxTCwKLSAgMHhhNmJjNTc2N0wsIDB4M2ZiNTA2ZGRMLCAweDQ4YjIzNjRiTCwgMHhkODBkMmJkYUwsIDB4YWYwYTFiNGNMLAotICAweDM2MDM0YWY2TCwgMHg0MTA0N2E2MEwsIDB4ZGY2MGVmYzNMLCAweGE4NjdkZjU1TCwgMHgzMTZlOGVlZkwsCi0gIDB4NDY2OWJlNzlMLCAweGNiNjFiMzhjTCwgMHhiYzY2ODMxYUwsIDB4MjU2ZmQyYTBMLCAweDUyNjhlMjM2TCwKLSAgMHhjYzBjNzc5NUwsIDB4YmIwYjQ3MDNMLCAweDIyMDIxNmI5TCwgMHg1NTA1MjYyZkwsIDB4YzViYTNiYmVMLAotICAweGIyYmQwYjI4TCwgMHgyYmI0NWE5MkwsIDB4NWNiMzZhMDRMLCAweGMyZDdmZmE3TCwgMHhiNWQwY2YzMUwsCi0gIDB4MmNkOTllOGJMLCAweDViZGVhZTFkTCwgMHg5YjY0YzJiMEwsIDB4ZWM2M2YyMjZMLCAweDc1NmFhMzljTCwKLSAgMHgwMjZkOTMwYUwsIDB4OWMwOTA2YTlMLCAweGViMGUzNjNmTCwgMHg3MjA3Njc4NUwsIDB4MDUwMDU3MTNMLAotICAweDk1YmY0YTgyTCwgMHhlMmI4N2ExNEwsIDB4N2JiMTJiYWVMLCAweDBjYjYxYjM4TCwgMHg5MmQyOGU5YkwsCi0gIDB4ZTVkNWJlMGRMLCAweDdjZGNlZmI3TCwgMHgwYmRiZGYyMUwsIDB4ODZkM2QyZDRMLCAweGYxZDRlMjQyTCwKLSAgMHg2OGRkYjNmOEwsIDB4MWZkYTgzNmVMLCAweDgxYmUxNmNkTCwgMHhmNmI5MjY1YkwsIDB4NmZiMDc3ZTFMLAotICAweDE4Yjc0Nzc3TCwgMHg4ODA4NWFlNkwsIDB4ZmYwZjZhNzBMLCAweDY2MDYzYmNhTCwgMHgxMTAxMGI1Y0wsCi0gIDB4OGY2NTllZmZMLCAweGY4NjJhZTY5TCwgMHg2MTZiZmZkM0wsIDB4MTY2Y2NmNDVMLCAweGEwMGFlMjc4TCwKLSAgMHhkNzBkZDJlZUwsIDB4NGUwNDgzNTRMLCAweDM5MDNiM2MyTCwgMHhhNzY3MjY2MUwsIDB4ZDA2MDE2ZjdMLAotICAweDQ5Njk0NzRkTCwgMHgzZTZlNzdkYkwsIDB4YWVkMTZhNGFMLCAweGQ5ZDY1YWRjTCwgMHg0MGRmMGI2NkwsCi0gIDB4MzdkODNiZjBMLCAweGE5YmNhZTUzTCwgMHhkZWJiOWVjNUwsIDB4NDdiMmNmN2ZMLCAweDMwYjVmZmU5TCwKLSAgMHhiZGJkZjIxY0wsIDB4Y2FiYWMyOGFMLCAweDUzYjM5MzMwTCwgMHgyNGI0YTNhNkwsIDB4YmFkMDM2MDVMLAotICAweGNkZDcwNjkzTCwgMHg1NGRlNTcyOUwsIDB4MjNkOTY3YmZMLCAweGIzNjY3YTJlTCwgMHhjNDYxNGFiOEwsCi0gIDB4NWQ2ODFiMDJMLCAweDJhNmYyYjk0TCwgMHhiNDBiYmUzN0wsIDB4YzMwYzhlYTFMLCAweDVhMDVkZjFiTCwKLSAgMHgyZDAyZWY4ZEwKK3RvbGUoMHgwMDAwMDAwMEwpLCB0b2xlKDB4NzcwNzMwOTZMKSwgdG9sZSgweGVlMGU2MTJjTCksIHRvbGUoMHg5OTA5NTFiYUwpLAordG9sZSgweDA3NmRjNDE5TCksIHRvbGUoMHg3MDZhZjQ4ZkwpLCB0b2xlKDB4ZTk2M2E1MzVMKSwgdG9sZSgweDllNjQ5NWEzTCksCit0b2xlKDB4MGVkYjg4MzJMKSwgdG9sZSgweDc5ZGNiOGE0TCksIHRvbGUoMHhlMGQ1ZTkxZUwpLCB0b2xlKDB4OTdkMmQ5ODhMKSwKK3RvbGUoMHgwOWI2NGMyYkwpLCB0b2xlKDB4N2ViMTdjYmRMKSwgdG9sZSgweGU3YjgyZDA3TCksIHRvbGUoMHg5MGJmMWQ5MUwpLAordG9sZSgweDFkYjcxMDY0TCksIHRvbGUoMHg2YWIwMjBmMkwpLCB0b2xlKDB4ZjNiOTcxNDhMKSwgdG9sZSgweDg0YmU0MWRlTCksCit0b2xlKDB4MWFkYWQ0N2RMKSwgdG9sZSgweDZkZGRlNGViTCksIHRvbGUoMHhmNGQ0YjU1MUwpLCB0b2xlKDB4ODNkMzg1YzdMKSwKK3RvbGUoMHgxMzZjOTg1NkwpLCB0b2xlKDB4NjQ2YmE4YzBMKSwgdG9sZSgweGZkNjJmOTdhTCksIHRvbGUoMHg4YTY1YzllY0wpLAordG9sZSgweDE0MDE1YzRmTCksIHRvbGUoMHg2MzA2NmNkOUwpLCB0b2xlKDB4ZmEwZjNkNjNMKSwgdG9sZSgweDhkMDgwZGY1TCksCit0b2xlKDB4M2I2ZTIwYzhMKSwgdG9sZSgweDRjNjkxMDVlTCksIHRvbGUoMHhkNTYwNDFlNEwpLCB0b2xlKDB4YTI2NzcxNzJMKSwKK3RvbGUoMHgzYzAzZTRkMUwpLCB0b2xlKDB4NGIwNGQ0NDdMKSwgdG9sZSgweGQyMGQ4NWZkTCksIHRvbGUoMHhhNTBhYjU2YkwpLAordG9sZSgweDM1YjVhOGZhTCksIHRvbGUoMHg0MmIyOTg2Y0wpLCB0b2xlKDB4ZGJiYmM5ZDZMKSwgdG9sZSgweGFjYmNmOTQwTCksCit0b2xlKDB4MzJkODZjZTNMKSwgdG9sZSgweDQ1ZGY1Yzc1TCksIHRvbGUoMHhkY2Q2MGRjZkwpLCB0b2xlKDB4YWJkMTNkNTlMKSwKK3RvbGUoMHgyNmQ5MzBhY0wpLCB0b2xlKDB4NTFkZTAwM2FMKSwgdG9sZSgweGM4ZDc1MTgwTCksIHRvbGUoMHhiZmQwNjExNkwpLAordG9sZSgweDIxYjRmNGI1TCksIHRvbGUoMHg1NmIzYzQyM0wpLCB0b2xlKDB4Y2ZiYTk1OTlMKSwgdG9sZSgweGI4YmRhNTBmTCksCit0b2xlKDB4MjgwMmI4OWVMKSwgdG9sZSgweDVmMDU4ODA4TCksIHRvbGUoMHhjNjBjZDliMkwpLCB0b2xlKDB4YjEwYmU5MjRMKSwKK3RvbGUoMHgyZjZmN2M4N0wpLCB0b2xlKDB4NTg2ODRjMTFMKSwgdG9sZSgweGMxNjExZGFiTCksIHRvbGUoMHhiNjY2MmQzZEwpLAordG9sZSgweDc2ZGM0MTkwTCksIHRvbGUoMHgwMWRiNzEwNkwpLCB0b2xlKDB4OThkMjIwYmNMKSwgdG9sZSgweGVmZDUxMDJhTCksCit0b2xlKDB4NzFiMTg1ODlMKSwgdG9sZSgweDA2YjZiNTFmTCksIHRvbGUoMHg5ZmJmZTRhNUwpLCB0b2xlKDB4ZThiOGQ0MzNMKSwKK3RvbGUoMHg3ODA3YzlhMkwpLCB0b2xlKDB4MGYwMGY5MzRMKSwgdG9sZSgweDk2MDlhODhlTCksIHRvbGUoMHhlMTBlOTgxOEwpLAordG9sZSgweDdmNmEwZGJiTCksIHRvbGUoMHgwODZkM2QyZEwpLCB0b2xlKDB4OTE2NDZjOTdMKSwgdG9sZSgweGU2NjM1YzAxTCksCit0b2xlKDB4NmI2YjUxZjRMKSwgdG9sZSgweDFjNmM2MTYyTCksIHRvbGUoMHg4NTY1MzBkOEwpLCB0b2xlKDB4ZjI2MjAwNGVMKSwKK3RvbGUoMHg2YzA2OTVlZEwpLCB0b2xlKDB4MWIwMWE1N2JMKSwgdG9sZSgweDgyMDhmNGMxTCksIHRvbGUoMHhmNTBmYzQ1N0wpLAordG9sZSgweDY1YjBkOWM2TCksIHRvbGUoMHgxMmI3ZTk1MEwpLCB0b2xlKDB4OGJiZWI4ZWFMKSwgdG9sZSgweGZjYjk4ODdjTCksCit0b2xlKDB4NjJkZDFkZGZMKSwgdG9sZSgweDE1ZGEyZDQ5TCksIHRvbGUoMHg4Y2QzN2NmM0wpLCB0b2xlKDB4ZmJkNDRjNjVMKSwKK3RvbGUoMHg0ZGIyNjE1OEwpLCB0b2xlKDB4M2FiNTUxY2VMKSwgdG9sZSgweGEzYmMwMDc0TCksIHRvbGUoMHhkNGJiMzBlMkwpLAordG9sZSgweDRhZGZhNTQxTCksIHRvbGUoMHgzZGQ4OTVkN0wpLCB0b2xlKDB4YTRkMWM0NmRMKSwgdG9sZSgweGQzZDZmNGZiTCksCit0b2xlKDB4NDM2OWU5NmFMKSwgdG9sZSgweDM0NmVkOWZjTCksIHRvbGUoMHhhZDY3ODg0NkwpLCB0b2xlKDB4ZGE2MGI4ZDBMKSwKK3RvbGUoMHg0NDA0MmQ3M0wpLCB0b2xlKDB4MzMwMzFkZTVMKSwgdG9sZSgweGFhMGE0YzVmTCksIHRvbGUoMHhkZDBkN2NjOUwpLAordG9sZSgweDUwMDU3MTNjTCksIHRvbGUoMHgyNzAyNDFhYUwpLCB0b2xlKDB4YmUwYjEwMTBMKSwgdG9sZSgweGM5MGMyMDg2TCksCit0b2xlKDB4NTc2OGI1MjVMKSwgdG9sZSgweDIwNmY4NWIzTCksIHRvbGUoMHhiOTY2ZDQwOUwpLCB0b2xlKDB4Y2U2MWU0OWZMKSwKK3RvbGUoMHg1ZWRlZjkwZUwpLCB0b2xlKDB4MjlkOWM5OThMKSwgdG9sZSgweGIwZDA5ODIyTCksIHRvbGUoMHhjN2Q3YThiNEwpLAordG9sZSgweDU5YjMzZDE3TCksIHRvbGUoMHgyZWI0MGQ4MUwpLCB0b2xlKDB4YjdiZDVjM2JMKSwgdG9sZSgweGMwYmE2Y2FkTCksCit0b2xlKDB4ZWRiODgzMjBMKSwgdG9sZSgweDlhYmZiM2I2TCksIHRvbGUoMHgwM2I2ZTIwY0wpLCB0b2xlKDB4NzRiMWQyOWFMKSwKK3RvbGUoMHhlYWQ1NDczOUwpLCB0b2xlKDB4OWRkMjc3YWZMKSwgdG9sZSgweDA0ZGIyNjE1TCksIHRvbGUoMHg3M2RjMTY4M0wpLAordG9sZSgweGUzNjMwYjEyTCksIHRvbGUoMHg5NDY0M2I4NEwpLCB0b2xlKDB4MGQ2ZDZhM2VMKSwgdG9sZSgweDdhNmE1YWE4TCksCit0b2xlKDB4ZTQwZWNmMGJMKSwgdG9sZSgweDkzMDlmZjlkTCksIHRvbGUoMHgwYTAwYWUyN0wpLCB0b2xlKDB4N2QwNzllYjFMKSwKK3RvbGUoMHhmMDBmOTM0NEwpLCB0b2xlKDB4ODcwOGEzZDJMKSwgdG9sZSgweDFlMDFmMjY4TCksIHRvbGUoMHg2OTA2YzJmZUwpLAordG9sZSgweGY3NjI1NzVkTCksIHRvbGUoMHg4MDY1NjdjYkwpLCB0b2xlKDB4MTk2YzM2NzFMKSwgdG9sZSgweDZlNmIwNmU3TCksCit0b2xlKDB4ZmVkNDFiNzZMKSwgdG9sZSgweDg5ZDMyYmUwTCksIHRvbGUoMHgxMGRhN2E1YUwpLCB0b2xlKDB4NjdkZDRhY2NMKSwKK3RvbGUoMHhmOWI5ZGY2ZkwpLCB0b2xlKDB4OGViZWVmZjlMKSwgdG9sZSgweDE3YjdiZTQzTCksIHRvbGUoMHg2MGIwOGVkNUwpLAordG9sZSgweGQ2ZDZhM2U4TCksIHRvbGUoMHhhMWQxOTM3ZUwpLCB0b2xlKDB4MzhkOGMyYzRMKSwgdG9sZSgweDRmZGZmMjUyTCksCit0b2xlKDB4ZDFiYjY3ZjFMKSwgdG9sZSgweGE2YmM1NzY3TCksIHRvbGUoMHgzZmI1MDZkZEwpLCB0b2xlKDB4NDhiMjM2NGJMKSwKK3RvbGUoMHhkODBkMmJkYUwpLCB0b2xlKDB4YWYwYTFiNGNMKSwgdG9sZSgweDM2MDM0YWY2TCksIHRvbGUoMHg0MTA0N2E2MEwpLAordG9sZSgweGRmNjBlZmMzTCksIHRvbGUoMHhhODY3ZGY1NUwpLCB0b2xlKDB4MzE2ZThlZWZMKSwgdG9sZSgweDQ2NjliZTc5TCksCit0b2xlKDB4Y2I2MWIzOGNMKSwgdG9sZSgweGJjNjY4MzFhTCksIHRvbGUoMHgyNTZmZDJhMEwpLCB0b2xlKDB4NTI2OGUyMzZMKSwKK3RvbGUoMHhjYzBjNzc5NUwpLCB0b2xlKDB4YmIwYjQ3MDNMKSwgdG9sZSgweDIyMDIxNmI5TCksIHRvbGUoMHg1NTA1MjYyZkwpLAordG9sZSgweGM1YmEzYmJlTCksIHRvbGUoMHhiMmJkMGIyOEwpLCB0b2xlKDB4MmJiNDVhOTJMKSwgdG9sZSgweDVjYjM2YTA0TCksCit0b2xlKDB4YzJkN2ZmYTdMKSwgdG9sZSgweGI1ZDBjZjMxTCksIHRvbGUoMHgyY2Q5OWU4YkwpLCB0b2xlKDB4NWJkZWFlMWRMKSwKK3RvbGUoMHg5YjY0YzJiMEwpLCB0b2xlKDB4ZWM2M2YyMjZMKSwgdG9sZSgweDc1NmFhMzljTCksIHRvbGUoMHgwMjZkOTMwYUwpLAordG9sZSgweDljMDkwNmE5TCksIHRvbGUoMHhlYjBlMzYzZkwpLCB0b2xlKDB4NzIwNzY3ODVMKSwgdG9sZSgweDA1MDA1NzEzTCksCit0b2xlKDB4OTViZjRhODJMKSwgdG9sZSgweGUyYjg3YTE0TCksIHRvbGUoMHg3YmIxMmJhZUwpLCB0b2xlKDB4MGNiNjFiMzhMKSwKK3RvbGUoMHg5MmQyOGU5YkwpLCB0b2xlKDB4ZTVkNWJlMGRMKSwgdG9sZSgweDdjZGNlZmI3TCksIHRvbGUoMHgwYmRiZGYyMUwpLAordG9sZSgweDg2ZDNkMmQ0TCksIHRvbGUoMHhmMWQ0ZTI0MkwpLCB0b2xlKDB4NjhkZGIzZjhMKSwgdG9sZSgweDFmZGE4MzZlTCksCit0b2xlKDB4ODFiZTE2Y2RMKSwgdG9sZSgweGY2YjkyNjViTCksIHRvbGUoMHg2ZmIwNzdlMUwpLCB0b2xlKDB4MThiNzQ3NzdMKSwKK3RvbGUoMHg4ODA4NWFlNkwpLCB0b2xlKDB4ZmYwZjZhNzBMKSwgdG9sZSgweDY2MDYzYmNhTCksIHRvbGUoMHgxMTAxMGI1Y0wpLAordG9sZSgweDhmNjU5ZWZmTCksIHRvbGUoMHhmODYyYWU2OUwpLCB0b2xlKDB4NjE2YmZmZDNMKSwgdG9sZSgweDE2NmNjZjQ1TCksCit0b2xlKDB4YTAwYWUyNzhMKSwgdG9sZSgweGQ3MGRkMmVlTCksIHRvbGUoMHg0ZTA0ODM1NEwpLCB0b2xlKDB4MzkwM2IzYzJMKSwKK3RvbGUoMHhhNzY3MjY2MUwpLCB0b2xlKDB4ZDA2MDE2ZjdMKSwgdG9sZSgweDQ5Njk0NzRkTCksIHRvbGUoMHgzZTZlNzdkYkwpLAordG9sZSgweGFlZDE2YTRhTCksIHRvbGUoMHhkOWQ2NWFkY0wpLCB0b2xlKDB4NDBkZjBiNjZMKSwgdG9sZSgweDM3ZDgzYmYwTCksCit0b2xlKDB4YTliY2FlNTNMKSwgdG9sZSgweGRlYmI5ZWM1TCksIHRvbGUoMHg0N2IyY2Y3ZkwpLCB0b2xlKDB4MzBiNWZmZTlMKSwKK3RvbGUoMHhiZGJkZjIxY0wpLCB0b2xlKDB4Y2FiYWMyOGFMKSwgdG9sZSgweDUzYjM5MzMwTCksIHRvbGUoMHgyNGI0YTNhNkwpLAordG9sZSgweGJhZDAzNjA1TCksIHRvbGUoMHhjZGQ3MDY5M0wpLCB0b2xlKDB4NTRkZTU3MjlMKSwgdG9sZSgweDIzZDk2N2JmTCksCit0b2xlKDB4YjM2NjdhMmVMKSwgdG9sZSgweGM0NjE0YWI4TCksIHRvbGUoMHg1ZDY4MWIwMkwpLCB0b2xlKDB4MmE2ZjJiOTRMKSwKK3RvbGUoMHhiNDBiYmUzN0wpLCB0b2xlKDB4YzMwYzhlYTFMKSwgdG9sZSgweDVhMDVkZjFiTCksIHRvbGUoMHgyZDAyZWY4ZEwpCiB9OwogI2VuZGlmCiAKQEAgLTE0OCw1NCArMTYzLDYzIEBACiAjZW5kaWYKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotI2RlZmluZSBETzEoYnVmKSBjcmMgPSBjcmNfdGFibGVbKChpbnQpY3JjIF4gKCpidWYrKykpICYgMHhmZl0gXiAoY3JjID4+IDgpOwotI2RlZmluZSBETzIoYnVmKSAgRE8xKGJ1Zik7IERPMShidWYpOwotI2RlZmluZSBETzQoYnVmKSAgRE8yKGJ1Zik7IERPMihidWYpOwotI2RlZmluZSBETzgoYnVmKSAgRE80KGJ1Zik7IERPNChidWYpOworIyBpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyMgIGRlZmluZSBET19DUkMoeCkgY3JjID0gdGFiWyhjcmMgXiAoeCkpICYgMjU1XSBeIChjcmMgPj4gOCkKKyMgZWxzZQorIyAgZGVmaW5lIERPX0NSQyh4KSBjcmMgPSB0YWJbKChjcmMgPj4gMjQpIF4gKHgpKSAmIDI1NV0gXiAoY3JjIDw8IDgpCisjIGVuZGlmCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLXVpbnQzMl90IFpFWFBPUlQgY3JjMzIgKHVpbnQzMl90IGNyYywgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pCi17Ci0jaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKLSAgICBpZiAoY3JjX3RhYmxlX2VtcHR5KQotICAgICAgbWFrZV9jcmNfdGFibGUoKTsKLSNlbmRpZgotICAgIGNyYyA9IGNyYyBeIDB4ZmZmZmZmZmZMOwotICAgIHdoaWxlIChsZW4gPj0gOCkKLSAgICB7Ci0gICAgICBETzgoYnVmKTsKLSAgICAgIGxlbiAtPSA4OwotICAgIH0KLSAgICBpZiAobGVuKSBkbyB7Ci0gICAgICBETzEoYnVmKTsKLSAgICB9IHdoaWxlICgtLWxlbik7Ci0gICAgcmV0dXJuIGNyYyBeIDB4ZmZmZmZmZmZMOwotfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ01EX0pGRlMyKSB8fCBkZWZpbmVkKENPTkZJR19DTURfTkFORCkKIAogLyogTm8gb25lcyBjb21wbGVtZW50IHZlcnNpb24uIEpGRlMyIChhbmQgb3RoZXIgdGhpbmdzID8pCiAgKiBkb24ndCB1c2Ugb25lcyBjb21wbGltZW50IGluIHRoZWlyIENSQyBjYWxjdWxhdGlvbnMuCiAgKi8KIHVpbnQzMl90IFpFWFBPUlQgY3JjMzJfbm9fY29tcCh1aW50MzJfdCBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKQogeworICAgIGNvbnN0IHVpbnQzMl90ICp0YWIgPSBjcmNfdGFibGU7CisgICAgY29uc3QgdWludDMyX3QgKmIgPShjb25zdCB1aW50MzJfdCAqKWJ1ZjsKKyAgICBzaXplX3QgcmVtX2xlbjsKICNpZmRlZiBEWU5BTUlDX0NSQ19UQUJMRQogICAgIGlmIChjcmNfdGFibGVfZW1wdHkpCiAgICAgICBtYWtlX2NyY190YWJsZSgpOwogI2VuZGlmCi0gICAgd2hpbGUgKGxlbiA+PSA4KQotICAgIHsKLSAgICAgIERPOChidWYpOwotICAgICAgbGVuIC09IDg7CisgICAgY3JjID0gY3B1X3RvX2xlMzIoY3JjKTsKKyAgICAvKiBBbGlnbiBpdCAqLworICAgIGlmICgoKGxvbmcpYikgJiAzICYmIGxlbikgeworCSB1aW50OF90ICpwID0gKHVpbnQ4X3QgKiliOworCSBkbyB7CisJICAgICAgRE9fQ1JDKCpwKyspOworCSB9IHdoaWxlICgoLS1sZW4pICYmICgobG9uZylwKSYzKTsKKwkgYiA9ICh1aW50MzJfdCAqKXA7CisgICAgfQorCisgICAgcmVtX2xlbiA9IGxlbiAmIDM7CisgICAgbGVuID0gbGVuID4+IDI7CisgICAgZm9yICgtLWI7IGxlbjsgLS1sZW4pIHsKKwkgLyogbG9hZCBkYXRhIDMyIGJpdHMgd2lkZSwgeG9yIGRhdGEgMzIgYml0cyB3aWRlLiAqLworCSBjcmMgXj0gKisrYjsgLyogdXNlIHByZSBpbmNyZW1lbnQgZm9yIHNwZWVkICovCisJIERPX0NSQygwKTsKKwkgRE9fQ1JDKDApOworCSBET19DUkMoMCk7CisJIERPX0NSQygwKTsKICAgICB9Ci0gICAgaWYgKGxlbikgZG8gewotICAgICAgRE8xKGJ1Zik7Ci0gICAgfSB3aGlsZSAoLS1sZW4pOworICAgIGxlbiA9IHJlbV9sZW47CisgICAgLyogQW5kIHRoZSBsYXN0IGZldyBieXRlcyAqLworICAgIGlmIChsZW4pIHsKKwkgdWludDhfdCAqcCA9ICh1aW50OF90ICopKGIgKyAxKSAtIDE7CisJIGRvIHsKKwkgICAgICBET19DUkMoKisrcCk7IC8qIHVzZSBwcmUgaW5jcmVtZW50IGZvciBzcGVlZCAqLworCSB9IHdoaWxlICgtLWxlbik7CisgICAgfQogCi0gICAgcmV0dXJuIGNyYzsKKyAgICByZXR1cm4gbGUzMl90b19jcHUoY3JjKTsKIH0KKyN1bmRlZiBET19DUkMKIAotI2VuZGlmCit1aW50MzJfdCBaRVhQT1JUIGNyYzMyICh1aW50MzJfdCBjcmMsIGNvbnN0IEJ5dGVmICpwLCB1SW50IGxlbikKK3sKKyAgICAgcmV0dXJuIGNyYzMyX25vX2NvbXAoY3JjIF4gMHhmZmZmZmZmZkwsIHAsIGxlbikgXiAweGZmZmZmZmZmTDsKK30KIAogLyoKICAqIENhbGN1bGF0ZSB0aGUgY3JjMzIgY2hlY2tzdW0gdHJpZ2dlcmluZyB0aGUgd2F0Y2hkb2cgZXZlcnkgJ2NodW5rX3N6JyBieXRlcwpkaWZmIC0tZ2l0IGEvbGliX2dlbmVyaWMvbHpvL2x6bzF4X2RlY29tcHJlc3MuYyBiL2xpYl9nZW5lcmljL2x6by9sem8xeF9kZWNvbXByZXNzLmMKaW5kZXggMjc4MGUxMS4uMDliZGM4ZiAxMDA2NDQKLS0tIGEvbGliX2dlbmVyaWMvbHpvL2x6bzF4X2RlY29tcHJlc3MuYworKysgYi9saWJfZ2VuZXJpYy9sem8vbHpvMXhfZGVjb21wcmVzcy5jCkBAIC0yNCw2ICsyNCw5MyBAQAogI2RlZmluZSBDT1BZNChkc3QsIHNyYykJXAogCQlwdXRfdW5hbGlnbmVkKGdldF91bmFsaWduZWQoKGNvbnN0IHUzMiAqKShzcmMpKSwgKHUzMiAqKShkc3QpKQogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBsem9wX21hZ2ljW10gPSB7CisJMHg4OSwgMHg0YywgMHg1YSwgMHg0ZiwgMHgwMCwgMHgwZCwgMHgwYSwgMHgxYSwgMHgwYQorfTsKKworI2RlZmluZSBIRUFERVJfSEFTX0ZJTFRFUgkweDAwMDAwODAwTAorCitzdGF0aWMgaW5saW5lIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhcnNlX2hlYWRlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMpCit7CisJdTggbGV2ZWwgPSAwOworCXUxNiB2ZXJzaW9uOworCWludCBpOworCisJLyogcmVhZCBtYWdpYzogOSBmaXJzdCBieXRlcyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGx6b3BfbWFnaWMpOyBpKyspIHsKKwkJaWYgKCpzcmMrKyAhPSBsem9wX21hZ2ljW2ldKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCS8qIGdldCB2ZXJzaW9uICgyYnl0ZXMpLCBza2lwIGxpYnJhcnkgdmVyc2lvbiAoMiksCisJICogJ25lZWQgdG8gYmUgZXh0cmFjdGVkJyB2ZXJzaW9uICgyKSBhbmQKKwkgKiBtZXRob2QgKDEpICovCisJdmVyc2lvbiA9IGdldF91bmFsaWduZWRfYmUxNihzcmMpOworCXNyYyArPSA3OworCWlmICh2ZXJzaW9uID49IDB4MDk0MCkKKwkJbGV2ZWwgPSAqc3JjKys7CisJaWYgKGdldF91bmFsaWduZWRfYmUzMihzcmMpICYgSEVBREVSX0hBU19GSUxURVIpCisJCXNyYyArPSA0OyAvKiBmaWx0ZXIgaW5mbyAqLworCisJLyogc2tpcCBmbGFncywgbW9kZSBhbmQgbXRpbWVfbG93ICovCisJc3JjICs9IDEyOworCWlmICh2ZXJzaW9uID49IDB4MDk0MCkKKwkJc3JjICs9IDQ7CS8qIHNraXAgbXRpbWVfaGlnaCAqLworCisJaSA9ICpzcmMrKzsKKwkvKiBkb24ndCBjYXJlIGFib3V0IHRoZSBmaWxlIG5hbWUsIGFuZCBza2lwIGNoZWNrc3VtICovCisJc3JjICs9IGkgKyA0OworCisJcmV0dXJuIHNyYzsKK30KKworaW50IGx6b3BfZGVjb21wcmVzcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNpemVfdCBzcmNfbGVuLAorCQkgICAgdW5zaWduZWQgY2hhciAqZHN0LCBzaXplX3QgKmRzdF9sZW4pCit7CisJdW5zaWduZWQgY2hhciAqc3RhcnQgPSBkc3Q7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2VuZCA9IHNyYyArIHNyY19sZW47CisJdTMyIHNsZW4sIGRsZW47CisJc2l6ZV90IHRtcDsKKwlpbnQgcjsKKworCXNyYyA9IHBhcnNlX2hlYWRlcihzcmMpOworCWlmICghc3JjKQorCQlyZXR1cm4gTFpPX0VfRVJST1I7CisKKwl3aGlsZSAoc3JjIDwgc2VuZCkgeworCQkvKiByZWFkIHVuY29tcHJlc3NlZCBibG9jayBzaXplICovCisJCWRsZW4gPSBnZXRfdW5hbGlnbmVkX2JlMzIoc3JjKTsKKwkJc3JjICs9IDQ7CisKKwkJLyogZXhpdCBpZiBsYXN0IGJsb2NrICovCisJCWlmIChkbGVuID09IDApIHsKKwkJCSpkc3RfbGVuID0gZHN0IC0gc3RhcnQ7CisJCQlyZXR1cm4gTFpPX0VfT0s7CisJCX0KKworCQkvKiByZWFkIGNvbXByZXNzZWQgYmxvY2sgc2l6ZSwgYW5kIHNraXAgYmxvY2sgY2hlY2tzdW0gaW5mbyAqLworCQlzbGVuID0gZ2V0X3VuYWxpZ25lZF9iZTMyKHNyYyk7CisJCXNyYyArPSA4OworCisJCWlmIChzbGVuIDw9IDAgfHwgc2xlbiA+IGRsZW4pCisJCQlyZXR1cm4gTFpPX0VfRVJST1I7CisKKwkJLyogZGVjb21wcmVzcyAqLworCQl0bXAgPSBkbGVuOworCQlyID0gbHpvMXhfZGVjb21wcmVzc19zYWZlKCh1OCAqKSBzcmMsIHNsZW4sIGRzdCwgJnRtcCk7CisKKwkJaWYgKHIgIT0gTFpPX0VfT0spCisJCQlyZXR1cm4gcjsKKworCQlpZiAoZGxlbiAhPSB0bXApCisJCQlyZXR1cm4gTFpPX0VfRVJST1I7CisKKwkJc3JjICs9IHNsZW47CisJCWRzdCArPSBkbGVuOworCX0KKworCXJldHVybiBMWk9fRV9JTlBVVF9PVkVSUlVOOworfQorCiBpbnQgbHpvMXhfZGVjb21wcmVzc19zYWZlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5fbGVuLAogCQkJdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3QgKm91dF9sZW4pCiB7CmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy90aW1lLmMgYi9saWJfZ2VuZXJpYy90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwOWMyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYl9nZW5lcmljL3RpbWUuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDkKKyAqIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPHdhdGNoZG9nLmg+CisKKyNpZm5kZWYgQ09ORklHX1dEX1BFUklPRAorIyBkZWZpbmUgQ09ORklHX1dEX1BFUklPRAkoMTAgKiAxMDAwICogMTAwMCkJLyogMTAgc2Vjb25kcyBkZWZhdWx0Ki8KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1bG9uZyBrdjsKKworCWRvIHsKKwkJV0FUQ0hET0dfUkVTRVQoKTsKKwkJa3YgPSB1c2VjID4gQ09ORklHX1dEX1BFUklPRCA/IENPTkZJR19XRF9QRVJJT0QgOiB1c2VjOworCQlfX3VkZWxheSAoa3YpOworCQl1c2VjIC09IGt2OworCX0gd2hpbGUodXNlYyk7Cit9CmRpZmYgLS1naXQgYS9saWJfZ2VuZXJpYy96bGliLmMgYi9saWJfZ2VuZXJpYy96bGliLmMKaW5kZXggZWYxZmEyMi4uMjZlNWFmMSAxMDA2NDQKLS0tIGEvbGliX2dlbmVyaWMvemxpYi5jCisrKyBiL2xpYl9nZW5lcmljL3psaWIuYwpAQCAtMjYsOCArMjYsMTAgQEAKICNkZWZpbmUgWlVUSUxfSAogI2RlZmluZSBaTElCX0lOVEVSTkFMCiAKLSNpbmNsdWRlICJ1LWJvb3QvemxpYi5oIgogI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgInUtYm9vdC96bGliLmgiCiAjdW5kZWYJT0ZGCQkJCS8qIGF2b2lkIGNvbmZsaWN0cyAqLwogCiAvKiBUbyBhdm9pZCBhIGJ1aWxkIHRpbWUgd2FybmluZyAqLwpAQCAtNDAyLDYgKzQwNCw3IEBACiAgKi8KICNkZWZpbmUgT0ZGIDEKICNkZWZpbmUgUFVQKGEpICorKyhhKQorI2RlZmluZSBVUF9VTkFMSUdORUQoYSkgZ2V0X3VuYWxpZ25lZCgrKyhhKSkKIAogLyoKICAgIERlY29kZSBsaXRlcmFsLCBsZW5ndGgsIGFuZCBkaXN0YW5jZSBjb2RlcyBhbmQgd3JpdGUgb3V0IHRoZSByZXN1bHRpbmcKQEAgLTYxOCwxOCArNjIxLDQ3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CisJCSAgICB1bnNpZ25lZCBzaG9ydCAqc291dDsKKwkJICAgIHVuc2lnbmVkIGxvbmcgbG9vcHM7CisKICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IG91dCAtIGRpc3Q7ICAgICAgICAgIC8qIGNvcHkgZGlyZWN0IGZyb20gb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaW5pbXVtIGxlbmd0aCBpcyB0aHJlZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDM7Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGxlbiA+IDIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIG1pbmltdW0gbGVuZ3RoIGlzIHRocmVlICovCisJCSAgICAvKiBBbGlnbiBvdXQgYWRkciAqLworCQkgICAgaWYgKCEoKGxvbmcpKG91dCAtIDEgKyBPRkYpICYgMSkpIHsKKwkJCVBVUChvdXQpID0gUFVQKGZyb20pOworCQkJbGVuLS07CisJCSAgICB9CisJCSAgICBzb3V0ID0gKHVuc2lnbmVkIHNob3J0ICopKG91dCAtIE9GRik7CisJCSAgICBpZiAoZGlzdCA+IDIgKSB7CisJCQl1bnNpZ25lZCBzaG9ydCAqc2Zyb207CisKKwkJCXNmcm9tID0gKHVuc2lnbmVkIHNob3J0ICopKGZyb20gLSBPRkYpOworCQkJbG9vcHMgPSBsZW4gPj4gMTsKKwkJCWRvCisJCQkgICAgUFVQKHNvdXQpID0gVVBfVU5BTElHTkVEKHNmcm9tKTsKKwkJCXdoaWxlICgtLWxvb3BzKTsKKwkJCW91dCA9ICh1bnNpZ25lZCBjaGFyICopc291dCArIE9GRjsKKwkJCWZyb20gPSAodW5zaWduZWQgY2hhciAqKXNmcm9tICsgT0ZGOworCQkgICAgfSBlbHNlIHsgLyogZGlzdCA9PSAxIG9yIGRpc3QgPT0gMiAqLworCQkJdW5zaWduZWQgc2hvcnQgcGF0MTY7CisKKwkJCXBhdDE2ID0gKihzb3V0LTIrMipPRkYpOworCQkJaWYgKGRpc3QgPT0gMSkKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwkJCSAgICBwYXQxNiA9IChwYXQxNiAmIDB4ZmYpIHwgKChwYXQxNiAmIDB4ZmYgKSA8PCA4KTsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCQkJICAgIHBhdDE2ID0gKHBhdDE2ICYgMHhmZjAwKSB8ICgocGF0MTYgJiAweGZmMDAgKSA+PiA4KTsKKyNlbHNlCisjZXJyb3IgX19CSUdfRU5ESUFOIG5vciBfX0xJVFRMRV9FTkRJQU4gaXMgZGVmaW5lZAorI2VuZGlmCisJCQlsb29wcyA9IGxlbiA+PiAxOworCQkJZG8KKwkJCSAgICBQVVAoc291dCkgPSBwYXQxNjsKKwkJCXdoaWxlICgtLWxvb3BzKTsKKwkJCW91dCA9ICh1bnNpZ25lZCBjaGFyICopc291dCArIE9GRjsKKwkJICAgIH0KKwkJICAgIGlmIChsZW4gJiAxKQorCQkJUFVQKG91dCkgPSBQVVAoZnJvbSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09IDApIHsgICAgICAgICAgLyogMm5kIGxldmVsIGRpc3RhbmNlIGNvZGUgKi8KZGlmZiAtLWdpdCBhL2xpYl9pMzg2L01ha2VmaWxlIGIvbGliX2kzODYvTWFrZWZpbGUKaW5kZXggYmI5YjMzMC4uOTgzODUwNiAxMDA2NDQKLS0tIGEvbGliX2kzODYvTWFrZWZpbGUKKysrIGIvbGliX2kzODYvTWFrZWZpbGUKQEAgLTMyLDE2ICszMiwxNiBAQAogQ09CSlMteQkrPSBiaW9zX3NldHVwLm8KIENPQkpTLXkJKz0gYm9hcmQubwogQ09CSlMteQkrPSBib290bS5vCitDT0JKUy15CSs9IGludGVycnVwdHMubworQ09CSlMtJChDT05GSUdfU1lTX1BDQVRfSU5URVJSVVBUUykgKz0gcGNhdF9pbnRlcnJ1cHRzLm8KK0NPQkpTLSQoQ09ORklHX1NZU19HRU5FUklDX1RJTUVSKSArPSBwY2F0X3RpbWVyLm8KIENPQkpTLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KIENPQkpTLSQoQ09ORklHX1BDSSkgKz0gcGNpX3R5cGUxLm8KIENPQkpTLXkJKz0gcmVhbG1vZGUubworQ09CSlMteQkrPSB0aW1lci5vCiBDT0JKUy15CSs9IHZpZGVvX2Jpb3MubwogQ09CSlMteQkrPSB2aWRlby5vCiBDT0JKUy15CSs9IHppbWFnZS5vCi1DT0JKUy15CSs9IGludGVycnVwdHMubwotQ09CSlMteQkrPSB0aW1lci5vCi1DT0JKUy0kKENPTkZJR19TWVNfUENBVF9JTlRFUlJVUFRTKSArPSBwY2F0X2ludGVycnVwdHMubwotQ09CSlMtJChDT05GSUdfU1lTX0dFTkVSSUNfVElNRVIpICs9IHBjYXRfdGltZXIubwogCiBTUkNTCTo9ICQoU09CSlMteToubz0uUykgJChDT0JKUy15Oi5vPS5jKQogT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChTT0JKUy15KSAkKENPQkpTLXkpKQpkaWZmIC0tZ2l0IGEvbGliX2kzODYvYmlvcy5TIGIvbGliX2kzODYvYmlvcy5TCmluZGV4IGQ2Y2EzZTMuLjQ4ZjFiODEgMTAwNjQ0Ci0tLSBhL2xpYl9pMzg2L2Jpb3MuUworKysgYi9saWJfaTM4Ni9iaW9zLlMKQEAgLTUwLDEzNCArNTAsMjAwIEBACiAJam1wCXJlYWxtb2RlX3Jlc2V0CiAKIC5nbG9ibCBybV9pbnQwMAorLmhpZGRlbiBybV9pbnQwMAorLnR5cGUgcm1faW50MDAsIEBmdW5jdGlvbgogcm1faW50MDA6CiAJcHVzaHcJJDAKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MDEKKy5oaWRkZW4gcm1faW50MDEKKy50eXBlIHJtX2ludDAxLCBAZnVuY3Rpb24KIHJtX2ludDAxOgogCXB1c2h3CSQxCiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDAyCisuaGlkZGVuIHJtX2ludDAyCisudHlwZSBybV9pbnQwMiwgQGZ1bmN0aW9uCiBybV9pbnQwMjoKIAlwdXNodwkkMgogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQwMworLmhpZGRlbiBybV9pbnQwMworLnR5cGUgcm1faW50MDMsIEBmdW5jdGlvbgogcm1faW50MDM6CiAJcHVzaHcJJDMKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MDQKKy5oaWRkZW4gcm1faW50MDQKKy50eXBlIHJtX2ludDA0LCBAZnVuY3Rpb24KIHJtX2ludDA0OgogCXB1c2h3CSQ0CiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDA1CisuaGlkZGVuIHJtX2ludDA1CisudHlwZSBybV9pbnQwNSwgQGZ1bmN0aW9uCiBybV9pbnQwNToKIAlwdXNodwkkNQogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQwNgorLmhpZGRlbiBybV9pbnQwNgorLnR5cGUgcm1faW50MDYsIEBmdW5jdGlvbgogcm1faW50MDY6CiAJcHVzaHcJJDYKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MDcKKy5oaWRkZW4gcm1faW50MDcKKy50eXBlIHJtX2ludDA3LCBAZnVuY3Rpb24KIHJtX2ludDA3OgogCXB1c2h3CSQ3CiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDA4CisuaGlkZGVuIHJtX2ludDA4CisudHlwZSBybV9pbnQwOCwgQGZ1bmN0aW9uCiBybV9pbnQwODoKIAlwdXNodwkkOAogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQwOQorLmhpZGRlbiBybV9pbnQwOQorLnR5cGUgcm1faW50MDksIEBmdW5jdGlvbgogcm1faW50MDk6CiAJcHVzaHcJJDkKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MGEKKy5oaWRkZW4gcm1faW50MGEKKy50eXBlIHJtX2ludDBhLCBAZnVuY3Rpb24KIHJtX2ludDBhOgogCXB1c2h3CSQxMAogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQwYgorLmhpZGRlbiBybV9pbnQwYgorLnR5cGUgcm1faW50MGIsIEBmdW5jdGlvbgogcm1faW50MGI6CiAJcHVzaHcJJDExCiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDBjCisuaGlkZGVuIHJtX2ludDBjCisudHlwZSBybV9pbnQwYywgQGZ1bmN0aW9uCiBybV9pbnQwYzoKIAlwdXNodwkkMTIKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MGQKKy5oaWRkZW4gcm1faW50MGQKKy50eXBlIHJtX2ludDBkLCBAZnVuY3Rpb24KIHJtX2ludDBkOgogCXB1c2h3CSQxMwogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQwZQorLmhpZGRlbiBybV9pbnQwZQorLnR5cGUgcm1faW50MGUsIEBmdW5jdGlvbgogcm1faW50MGU6CiAJcHVzaHcJJDE0CiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDBmCisuaGlkZGVuIHJtX2ludDBmCisudHlwZSBybV9pbnQwZiwgQGZ1bmN0aW9uCiBybV9pbnQwZjoKIAlwdXNodwkkMTUKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MTAKKy5oaWRkZW4gcm1faW50MTAKKy50eXBlIHJtX2ludDEwLCBAZnVuY3Rpb24KIHJtX2ludDEwOgogCXB1c2h3CSQxNgogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQxMQorLmhpZGRlbiBybV9pbnQxMQorLnR5cGUgcm1faW50MTEsIEBmdW5jdGlvbgogcm1faW50MTE6CiAJcHVzaHcJJDE3CiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDEyCisuaGlkZGVuIHJtX2ludDEyCisudHlwZSBybV9pbnQxMiwgQGZ1bmN0aW9uCiBybV9pbnQxMjoKIAlwdXNodwkkMTgKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MTMKKy5oaWRkZW4gcm1faW50MTMKKy50eXBlIHJtX2ludDEzLCBAZnVuY3Rpb24KIHJtX2ludDEzOgogCXB1c2h3CSQxOQogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQxNAorLmhpZGRlbiBybV9pbnQxNAorLnR5cGUgcm1faW50MTQsIEBmdW5jdGlvbgogcm1faW50MTQ6CiAJcHVzaHcJJDIwCiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDE1CisuaGlkZGVuIHJtX2ludDE1CisudHlwZSBybV9pbnQxNSwgQGZ1bmN0aW9uCiBybV9pbnQxNToKIAlwdXNodwkkMjEKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MTYKKy5oaWRkZW4gcm1faW50MTYKKy50eXBlIHJtX2ludDE2LCBAZnVuY3Rpb24KIHJtX2ludDE2OgogCXB1c2h3CSQyMgogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQxNworLmhpZGRlbiBybV9pbnQxNworLnR5cGUgcm1faW50MTcsIEBmdW5jdGlvbgogcm1faW50MTc6CiAJcHVzaHcJJDIzCiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDE4CisuaGlkZGVuIHJtX2ludDE4CisudHlwZSBybV9pbnQxOCwgQGZ1bmN0aW9uCiBybV9pbnQxODoKIAlwdXNodwkkMjQKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MTkKKy5oaWRkZW4gcm1faW50MTkKKy50eXBlIHJtX2ludDE5LCBAZnVuY3Rpb24KIHJtX2ludDE5OgogCXB1c2h3CSQyNQogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQxYQorLmhpZGRlbiBybV9pbnQxYQorLnR5cGUgcm1faW50MWEsIEBmdW5jdGlvbgogcm1faW50MWE6CiAJcHVzaHcJJDI2CiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDFiCisuaGlkZGVuIHJtX2ludDFiCisudHlwZSBybV9pbnQxYiwgQGZ1bmN0aW9uCiBybV9pbnQxYjoKIAlwdXNodwkkMjcKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MWMKKy5oaWRkZW4gcm1faW50MWMKKy50eXBlIHJtX2ludDFjLCBAZnVuY3Rpb24KIHJtX2ludDFjOgogCXB1c2h3CSQyOAogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9pbnQxZAorLmhpZGRlbiBybV9pbnQxZAorLnR5cGUgcm1faW50MWQsIEBmdW5jdGlvbgogcm1faW50MWQ6CiAJcHVzaHcJJDI5CiAJam1wCWFueV9pbnRlcnJ1cHQxNgogLmdsb2JsIHJtX2ludDFlCisuaGlkZGVuIHJtX2ludDFlCisudHlwZSBybV9pbnQxZSwgQGZ1bmN0aW9uCiBybV9pbnQxZToKIAlwdXNodwkkMzAKIAlqbXAJYW55X2ludGVycnVwdDE2CiAuZ2xvYmwgcm1faW50MWYKKy5oaWRkZW4gcm1faW50MWYKKy50eXBlIHJtX2ludDFmLCBAZnVuY3Rpb24KIHJtX2ludDFmOgogCXB1c2h3CSQzMQogCWptcAlhbnlfaW50ZXJydXB0MTYKIC5nbG9ibCBybV9kZWZfaW50CisuaGlkZGVuIHJtX2RlZl9pbnQKKy50eXBlIHJtX2RlZl9pbnQsIEBmdW5jdGlvbgogcm1fZGVmX2ludDoKIAlpcmV0CiAKQEAgLTQ1NCw5ICs1MjAsMTMgQEAKIAogCiAuZ2xvYmwgcmFtX2luXzY0a2JfY2h1bmtzCisuaGlkZGVuIHJhbV9pbl82NGtiX2NodW5rcworLnR5cGUgcmFtX2luXzY0a2JfY2h1bmtzLCBAZnVuY3Rpb24KIHJhbV9pbl82NGtiX2NodW5rczoKIAkud29yZAkwCiAKIC5nbG9ibCBiaW9zX2VxdWlwbWVudAorLmhpZGRlbiBiaW9zX2VxdWlwbWVudAorLnR5cGUgYmlvc19lcXVpcG1lbnQsIEBmdW5jdGlvbgogYmlvc19lcXVpcG1lbnQ6CiAJLndvcmQJMApkaWZmIC0tZ2l0IGEvbGliX2kzODYvYmlvc19wY2kuUyBiL2xpYl9pMzg2L2Jpb3NfcGNpLlMKaW5kZXggNjdmZDAwYi4uOWU0MTJlNSAxMDA2NDQKLS0tIGEvbGliX2kzODYvYmlvc19wY2kuUworKysgYi9saWJfaTM4Ni9iaW9zX3BjaS5TCkBAIC0zNCw2ICszNCw4IEBACiAuc2VjdGlvbiAuYmlvcywgImF4IgogLmNvZGUxNgogLmdsb2JsIHJlYWxtb2RlX3BjaV9iaW9zX2NhbGxfZW50cnkKKy5oaWRkZW4gcmVhbG1vZGVfcGNpX2Jpb3NfY2FsbF9lbnRyeQorLnR5cGUgcmVhbG1vZGVfcGNpX2Jpb3NfY2FsbF9lbnRyeSwgQGZ1bmN0aW9uCiByZWFsbW9kZV9wY2lfYmlvc19jYWxsX2VudHJ5OgogCU1BS0VfQklPU19TVEFDSwogCWNhbGwgcmVhbG1vZGVfcGNpX2Jpb3MKZGlmZiAtLWdpdCBhL2xpYl9pMzg2L2Jpb3Nfc2V0dXAuYyBiL2xpYl9pMzg2L2Jpb3Nfc2V0dXAuYwppbmRleCAzM2M4NDJjLi42NDkxZTUyIDEwMDY0NAotLS0gYS9saWJfaTM4Ni9iaW9zX3NldHVwLmMKKysrIGIvbGliX2kzODYvYmlvc19zZXR1cC5jCkBAIC00NSw2ICs0NSw5IEBACiAjZGVmaW5lIEJJT1NfQkFTRSAgICAgICAgKChjaGFyKikweGYwMDAwKQogI2RlZmluZSBCSU9TX0NTICAgICAgICAgIDB4ZjAwMAogCitleHRlcm4gdWxvbmcgX2kzODZib290X2Jpb3M7CitleHRlcm4gdWxvbmcgX2kzODZib290X2Jpb3Nfc2l6ZTsKKwogLyogdGhlc2UgYXJlIGRlZmluZWQgaW4gYSAxNmJpdCBzZWdtZW50IGFuZCBuZWVkcwogICogdG8gYmUgYWNjZXNzZWQgd2l0aCB0aGUgUkVMT0NfMTZfeHh4eCgpIG1hY3JvcyBiZWxvdwogICovCkBAIC0xMzgsNiArMTQxLDkgQEAKIAogaW50IGJpb3Nfc2V0dXAodm9pZCkKIHsKKwl1bG9uZyBpMzg2Ym9vdF9iaW9zICAgICAgPSAodWxvbmcpJl9pMzg2Ym9vdF9iaW9zOworCXVsb25nIGkzODZib290X2Jpb3Nfc2l6ZSA9ICh1bG9uZykmX2kzODZib290X2Jpb3Nfc2l6ZTsKKwogCXN0YXRpYyBpbnQgZG9uZT0wOwogCWludCB2ZWN0b3I7CiAjaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvbGliX2kzODYvYm9hcmQuYyBiL2xpYl9pMzg2L2JvYXJkLmMKaW5kZXggMTJjYTIwZi4uZjNiNjM0OCAxMDA2NDQKLS0tIGEvbGliX2kzODYvYm9hcmQuYworKysgYi9saWJfaTM4Ni9ib2FyZC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bmV0Lmg+CiAjaW5jbHVkZSA8aWRlLmg+CiAjaW5jbHVkZSA8YXNtL3UtYm9vdC1pMzg2Lmg+CisjaW5jbHVkZSA8ZWxmLmg+CiAKICNpZmRlZiBDT05GSUdfQklUQkFOR01JSQogI2luY2x1ZGUgPG1paXBoeS5oPgpAQCAtNDUsNTMgKzQ2LDE2IEBACiAKIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOwogCi1leHRlcm4gbG9uZyBfaTM4NmJvb3Rfc3RhcnQ7Ci1leHRlcm4gbG9uZyBfaTM4NmJvb3RfZW5kOwotZXh0ZXJuIGxvbmcgX2kzODZib290X3JvbWRhdGFfc3RhcnQ7Ci1leHRlcm4gbG9uZyBfaTM4NmJvb3Rfcm9tZGF0YV9kZXN0OwotZXh0ZXJuIGxvbmcgX2kzODZib290X3JvbWRhdGFfc2l6ZTsKLWV4dGVybiBsb25nIF9pMzg2Ym9vdF9ic3Nfc3RhcnQ7Ci1leHRlcm4gbG9uZyBfaTM4NmJvb3RfYnNzX3NpemU7Ci0KLWV4dGVybiBsb25nIF9pMzg2Ym9vdF9yZWFsbW9kZTsKLWV4dGVybiBsb25nIF9pMzg2Ym9vdF9yZWFsbW9kZV9zaXplOwotZXh0ZXJuIGxvbmcgX2kzODZib290X2Jpb3M7Ci1leHRlcm4gbG9uZyBfaTM4NmJvb3RfYmlvc19zaXplOwotCi0vKiBUaGUgc3ltYm9scyBkZWZpbmVkIGJ5IHRoZSBsaW5rZXIgc2NyaXB0IGJlY29tZXMgcG9pbnRlcnMKLSAqIHdoaWNoIGlzIHNvbWV3aGF0IGluY29udmVpZW50IC4uLiAqLwotdWxvbmcgaTM4NmJvb3Rfc3RhcnQgICAgICAgICA9ICh1bG9uZykmX2kzODZib290X3N0YXJ0OyAgICAgICAgIC8qIGNvZGUgc3RhcnQgKGluIGZsYXNoKSBkZWZpbmVkIGluIHN0YXJ0LlMgKi8KLXVsb25nIGkzODZib290X2VuZCAgICAgICAgICAgPSAodWxvbmcpJl9pMzg2Ym9vdF9lbmQ7CSAgICAgICAgLyogY29kZSBlbmQgKGluIGZsYXNoKSAqLwotdWxvbmcgaTM4NmJvb3Rfcm9tZGF0YV9zdGFydCA9ICh1bG9uZykmX2kzODZib290X3JvbWRhdGFfc3RhcnQ7IC8qIGRhdGFzZWdtZW50IGluIGZsYXNoIChhbHNvIGNvZGUrcm9kYXRhIGVuZCkgKi8KLXVsb25nIGkzODZib290X3JvbWRhdGFfZGVzdCAgPSAodWxvbmcpJl9pMzg2Ym9vdF9yb21kYXRhX2Rlc3Q7ICAvKiBkYXRhIGxvY2F0aW9uIHNlZ21lbnQgaW4gcmFtICovCi11bG9uZyBpMzg2Ym9vdF9yb21kYXRhX3NpemUgID0gKHVsb25nKSZfaTM4NmJvb3Rfcm9tZGF0YV9zaXplOyAgLyogc2l6ZSBvZiBkYXRhIHNlZ21lbnQgKi8KLXVsb25nIGkzODZib290X2Jzc19zdGFydCAgICAgPSAodWxvbmcpJl9pMzg2Ym9vdF9ic3Nfc3RhcnQ7ICAgICAvKiBic3Mgc3RhcnQgKi8KLXVsb25nIGkzODZib290X2Jzc19zaXplICAgICAgPSAodWxvbmcpJl9pMzg2Ym9vdF9ic3Nfc2l6ZTsgICAgICAvKiBic3Mgc2l6ZSAqLwotCi11bG9uZyBpMzg2Ym9vdF9yZWFsbW9kZSAgICAgID0gKHVsb25nKSZfaTM4NmJvb3RfcmVhbG1vZGU7ICAgICAgLyogc3RhcnQgb2YgcmVhbG1vZGUgZW50cnkgY29kZSAqLwotdWxvbmcgaTM4NmJvb3RfcmVhbG1vZGVfc2l6ZSA9ICh1bG9uZykmX2kzODZib290X3JlYWxtb2RlX3NpemU7IC8qIHNpemUgb2YgcmVhbG1vZGUgZW50cnkgY29kZSAqLwotdWxvbmcgaTM4NmJvb3RfYmlvcyAgICAgICAgICA9ICh1bG9uZykmX2kzODZib290X2Jpb3M7ICAgICAgICAgIC8qIHN0YXJ0IG9mIEJJT1MgZW11bGF0aW9uIGNvZGUgKi8KLXVsb25nIGkzODZib290X2Jpb3Nfc2l6ZSAgICAgPSAodWxvbmcpJl9pMzg2Ym9vdF9iaW9zX3NpemU7ICAgICAvKiBzaXplIG9mIEJJT1MgZW11bGF0aW9uIGNvZGUgKi8KLQotCisvKiBFeHBvcnRzIGZyb20gdGhlIExpbmtlciBTY3JpcHQgKi8KK2V4dGVybiB1bG9uZyBfaTM4NmJvb3RfdGV4dF9zdGFydDsKK2V4dGVybiB1bG9uZyBfaTM4NmJvb3RfcmVsX2R5bl9zdGFydDsKK2V4dGVybiB1bG9uZyBfaTM4NmJvb3RfcmVsX2R5bl9lbmQ7CitleHRlcm4gdWxvbmcgX2kzODZib290X2Jzc19zdGFydDsKK2V4dGVybiB1bG9uZyBfaTM4NmJvb3RfYnNzX3NpemU7Cit2b2lkIHJhbV9ib290c3RyYXAgKHZvaWQgKik7CiBjb25zdCBjaGFyIHZlcnNpb25fc3RyaW5nW10gPQogCVVfQk9PVF9WRVJTSU9OIiAoIiBVX0JPT1RfREFURSAiIC0gIiBVX0JPT1RfVElNRSAiKSI7CiAKLXN0YXRpYyBpbnQgbWVtX21hbGxvY19pbml0KHZvaWQpCi17Ci0JLyogc3RhcnQgbWFsbG9jIGFyZWEgcmlnaHQgYWZ0ZXIgdGhlIHN0YWNrICovCi0JbWVtX21hbGxvY19zdGFydCA9IGkzODZib290X2Jzc19zdGFydCArCi0JCWkzODZib290X2Jzc19zaXplICsgQ09ORklHX1NZU19TVEFDS19TSVpFOwotCW1lbV9tYWxsb2Nfc3RhcnQgPSAobWVtX21hbGxvY19zdGFydCszKSZ+MzsKLQotCS8qIFVzZSBhbGwgYXZhaWxhYmxlIFJBTSBmb3IgbWFsbG9jKCkgKi8KLQltZW1fbWFsbG9jX2VuZCA9IGdkLT5yYW1fc2l6ZTsKLQotCW1lbV9tYWxsb2NfYnJrID0gbWVtX21hbGxvY19zdGFydDsKLQotCXJldHVybiAwOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJbml0IFV0aWxpdGllcwkJCQkJCQkqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTUsNiArNzksNyBAQAogewogCiAJcHJpbnRmICgiXG5cbiVzXG5cbiIsIHZlcnNpb25fc3RyaW5nKTsKKy8qCiAJcHJpbnRmICgiVS1Cb290IGNvZGU6ICUwOGxYIC0+ICUwOGxYICBkYXRhOiAlMDhsWCAtPiAlMDhsWFxuIgogCQkiICAgICAgICBCU1M6ICUwOGxYIC0+ICUwOGxYIHN0YWNrOiAlMDhsWCAtPiAlMDhsWFxuIiwKIAkJaTM4NmJvb3Rfc3RhcnQsIGkzODZib290X3JvbWRhdGFfc3RhcnQtMSwKQEAgLTEyMyw2ICs4OCw3IEBACiAJCWkzODZib290X2Jzc19zdGFydCtpMzg2Ym9vdF9ic3Nfc2l6ZSwKIAkJaTM4NmJvb3RfYnNzX3N0YXJ0K2kzODZib290X2Jzc19zaXplK0NPTkZJR19TWVNfU1RBQ0tfU0laRS0xKTsKIAorKi8KIAogCXJldHVybiAoMCk7CiB9CkBAIC0xNTQsNyArMTIwLDYgQEAKIAlwcmludF9zaXplIChzaXplLCAiXG4iKTsKIH0KIAotCiAvKgogICogQnJlYXRoIHNvbWUgbGlmZSBpbnRvIHRoZSBib2FyZC4uLgogICoKQEAgLTE2Niw2ICsxMzEsNyBAQAogICogY2FuIHJlbG9jYXRlIHRoZSBtb25pdG9yIGNvZGUgdG8gUkFNLgogICovCiAKKwogLyoKICAqIEFsbCBhdHRlbXB0cyB0byBjb21lIHVwIHdpdGggYSAiY29tbW9uIiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQogICogdGhhdCB3b3JrcyBmb3IgYWxsIGJvYXJkcyBhbmQgYXJjaGl0ZWN0dXJlcyBmYWlsZWQ6IHNvbWUgb2YgdGhlCkBAIC0xODEsMTMgKzE0NywxMiBAQAogdHlwZWRlZiBpbnQgKGluaXRfZm5jX3QpICh2b2lkKTsKIAogaW5pdF9mbmNfdCAqaW5pdF9zZXF1ZW5jZVtdID0gewotCWNwdV9pbml0LAkJLyogYmFzaWMgY3B1IGRlcGVuZGVudCBzZXR1cCAqLwotCWJvYXJkX2luaXQsCQkvKiBiYXNpYyBib2FyZCBkZXBlbmRlbnQgc2V0dXAgKi8KKwlzZXJpYWxfaW5pdCwKKwljcHVfaW5pdF9yLAkJLyogYmFzaWMgY3B1IGRlcGVuZGVudCBzZXR1cCAqLworCWJvYXJkX2Vhcmx5X2luaXRfciwJLyogYmFzaWMgYm9hcmQgZGVwZW5kZW50IHNldHVwICovCiAJZHJhbV9pbml0LAkJLyogY29uZmlndXJlIGF2YWlsYWJsZSBSQU0gYmFua3MgKi8KLQltZW1fbWFsbG9jX2luaXQsICAgICAgICAvKiBkZXBlbmRhbnQgb24gZHJhbV9pbml0ICovCiAJaW50ZXJydXB0X2luaXQsCQkvKiBzZXQgdXAgZXhjZXB0aW9ucyAqLwogCXRpbWVyX2luaXQsCi0Jc2VyaWFsX2luaXQsCiAJZW52X2luaXQsCQkvKiBpbml0aWFsaXplIGVudmlyb25tZW50ICovCiAJaW5pdF9iYXVkcmF0ZSwJCS8qIGluaXRpYWx6ZSBiYXVkcmF0ZSBzZXR0aW5ncyAqLwogCXNlcmlhbF9pbml0LAkJLyogc2VyaWFsIGNvbW11bmljYXRpb25zIHNldHVwICovCkBAIC0xOTksMjEgKzE2NCw4NiBAQAogCiBnZF90ICpnZDsKIAotdm9pZCBzdGFydF9pMzg2Ym9vdCAodm9pZCkKKy8qCisgKiBMb2FkIFUtQm9vdCBpbnRvIFJBTSwgaW5pdGlhbGl6ZSBCU1MsIHBlcmZvcm0gcmVsb2NhdGlvbiBhZGp1c3RtZW50cworICovCit2b2lkIGJvYXJkX2luaXRfZiAodWxvbmcgc3RhY2tfbGltaXQpCit7CisJdm9pZCAqdGV4dF9zdGFydCA9ICZfaTM4NmJvb3RfdGV4dF9zdGFydDsKKwl2b2lkICp1X2Jvb3RfY21kX2VuZCA9ICZfX3VfYm9vdF9jbWRfZW5kOworCUVsZjMyX1JlbCAqcmVsX2R5bl9zdGFydCA9IChFbGYzMl9SZWwgKikmX2kzODZib290X3JlbF9keW5fc3RhcnQ7CisJRWxmMzJfUmVsICpyZWxfZHluX2VuZCA9IChFbGYzMl9SZWwgKikmX2kzODZib290X3JlbF9keW5fZW5kOworCXZvaWQgKmJzc19zdGFydCA9ICZfaTM4NmJvb3RfYnNzX3N0YXJ0OworCXZvaWQgKmJzc19zaXplID0gJl9pMzg2Ym9vdF9ic3Nfc2l6ZTsKKworCXNpemVfdCB1Ym9vdF9zaXplOworCXZvaWQgKnJhbV9zdGFydDsKKwl1bG9uZyByZWxfb2Zmc2V0OworCUVsZjMyX1JlbCAqcmU7CisKKwl2b2lkICgqc3RhcnRfZnVuYykodm9pZCAqKTsKKworCS8qIGNvbXBpbGVyIG9wdGltaXphdGlvbiBiYXJyaWVyIG5lZWRlZCBmb3IgR0NDID49IDMuNCAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7CisKKwl1Ym9vdF9zaXplID0gKHNpemVfdCl1X2Jvb3RfY21kX2VuZCAtIChzaXplX3QpdGV4dF9zdGFydDsKKwlyYW1fc3RhcnQgID0gKHZvaWQgKilzdGFja19saW1pdCAtICh1Ym9vdF9zaXplICsgKHVsb25nKWJzc19zaXplKTsKKwlyZWxfb2Zmc2V0ID0gdGV4dF9zdGFydCAtIHJhbV9zdGFydDsKKwlzdGFydF9mdW5jID0gcmFtX2Jvb3RzdHJhcCAtIHJlbF9vZmZzZXQ7CisKKwkvKiBGaXJzdCBzdGFnZSBDUFUgaW5pdGlhbGl6YXRpb24gKi8KKwlpZiAoY3B1X2luaXRfZigpICE9IDApCisJCWhhbmcoKTsKKworCS8qIEZpcnN0IHN0YWdlIEJvYXJkIGluaXRpYWxpemF0aW9uICovCisJaWYgKGJvYXJkX2Vhcmx5X2luaXRfZigpICE9IDApCisJCWhhbmcoKTsKKworCS8qIENvcHkgVS1Cb290IGludG8gUkFNICovCisJbWVtY3B5KHJhbV9zdGFydCwgdGV4dF9zdGFydCwgKHNpemVfdCl1Ym9vdF9zaXplKTsKKworCS8qIENsZWFyIEJTUyAqLworCW1lbXNldChic3Nfc3RhcnQgLSByZWxfb2Zmc2V0LAkwLCAoc2l6ZV90KWJzc19zaXplKTsKKworCS8qIFBlcmZvcm0gcmVsb2NhdGlvbiBhZGp1c3RtZW50cyAqLworCWZvciAocmUgPSByZWxfZHluX3N0YXJ0OyByZSA8IHJlbF9keW5fZW5kOyByZSsrKQorCXsKKwkJaWYgKHJlLT5yX29mZnNldCA+PSBURVhUX0JBU0UpCisJCQlpZiAoKih1bG9uZyAqKXJlLT5yX29mZnNldCA+PSBURVhUX0JBU0UpCisJCQkJKih1bG9uZyAqKShyZS0+cl9vZmZzZXQgLSByZWxfb2Zmc2V0KSAtPSAoRWxmMzJfQWRkcilyZWxfb2Zmc2V0OworCX0KKworCXN0YXJ0X2Z1bmMocmFtX3N0YXJ0KTsKKworCS8qIE5PVFJFQUNIRUQgLSByZWxvY2F0ZV9jb2RlKCkgZG9lcyBub3QgcmV0dXJuICovCisJd2hpbGUoMSk7Cit9CisKKy8qCisgKiBBbGwgYXR0ZW1wdHMgdG8ganVtcCBzdHJhaWdodCBmcm9tIGJvYXJkX2luaXRfZigpIHRvIGJvYXJkX2luaXRfcigpCisgKiBoYXZlIGZhaWxlZCwgaGVuY2UgdGhpcyBzcGVjaWFsICdib290c3RyYXAnIGZ1bmN0aW9uLgorICovCit2b2lkIHJhbV9ib290c3RyYXAgKHZvaWQgKnJhbV9zdGFydCkKK3sKKwlzdGF0aWMgZ2RfdCBnZF9kYXRhOworCisJLyogY29tcGlsZXIgb3B0aW1pemF0aW9uIGJhcnJpZXIgbmVlZGVkIGZvciBHQ0MgPj0gMy40ICovCisJX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKKworCWJvYXJkX2luaXRfcigmZ2RfZGF0YSwgKHVsb25nKXJhbV9zdGFydCk7Cit9CisKK3ZvaWQgYm9hcmRfaW5pdF9yKGdkX3QgKmlkLCB1bG9uZyByYW1fc3RhcnQpCiB7CiAJY2hhciAqczsKIAlpbnQgaTsKIAl1bG9uZyBzaXplOwotCXN0YXRpYyBnZF90IGdkX2RhdGE7CiAJc3RhdGljIGJkX3QgYmRfZGF0YTsKIAlpbml0X2ZuY190ICoqaW5pdF9mbmNfcHRyOwogCi0jaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCi0JY21kX3RibF90ICpwOwotI2VuZGlmCiAJc2hvd19ib290X3Byb2dyZXNzKDB4MjEpOwogCi0JZ2QgPSAmZ2RfZGF0YTsKKwlnZCA9IGlkOwogCS8qIGNvbXBpbGVyIG9wdGltaXphdGlvbiBiYXJyaWVyIG5lZWRlZCBmb3IgR0NDID49IDMuNCAqLwogCV9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7CiAKQEAgLTIyNCwxMCArMjU0LDExIEBACiAKIAlnZC0+YmF1ZHJhdGUgPSAgQ09ORklHX0JBVURSQVRFOwogCi0jaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCi0JLyogTmVlZCB0byBzZXQgcmVsb2NhdGlvbiBvZmZzZXQgaGVyZSBmb3IgaW50ZXJydXB0IGluaXRpYWxpemF0aW9uICovCi0JZ2QtPnJlbG9jX29mZiA9ICBDT05GSUdfU1lTX0JMX1NUQVJUX1JBTSAtIFRFWFRfQkFTRTsKLSNlbmRpZgorCWdkLT5mbGFncyB8PSBHRF9GTEdfUkVMT0M7CS8qIHRlbGwgb3RoZXJzOiByZWxvY2F0aW9uIGRvbmUgKi8KKworCW1lbV9tYWxsb2NfaW5pdCgoKCh1bG9uZylyYW1fc3RhcnQgLSBDT05GSUdfU1lTX01BTExPQ19MRU4pKzMpJn4zLAorCQkJQ09ORklHX1NZU19NQUxMT0NfTEVOKTsKKwogCWZvciAoaW5pdF9mbmNfcHRyID0gaW5pdF9zZXF1ZW5jZSwgaT0wOyAqaW5pdF9mbmNfcHRyOyArK2luaXRfZm5jX3B0ciwgaSsrKSB7CiAJCXNob3dfYm9vdF9wcm9ncmVzcygweGExMzB8aSk7CiAKQEAgLTIzNywyNiArMjY4LDYgQEAKIAl9CiAJc2hvd19ib290X3Byb2dyZXNzKDB4MjMpOwogCi0jaWZuZGVmIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UCi0JZm9yIChwID0gJl9fdV9ib290X2NtZF9zdGFydDsgcCAhPSAmX191X2Jvb3RfY21kX2VuZDsgcCsrKSB7Ci0JCXVsb25nIGFkZHI7Ci0JCWFkZHIgPSAodWxvbmcpIChwLT5jbWQpICsgZ2QtPnJlbG9jX29mZjsKLQkJcC0+Y21kID0gKGludCAoKikoc3RydWN0IGNtZF90YmxfcyAqLCBpbnQsIGludCwgY2hhciAqW10pKWFkZHI7Ci0JCWFkZHIgPSAodWxvbmcpKHAtPm5hbWUpICsgZ2QtPnJlbG9jX29mZjsKLQkJcC0+bmFtZSA9IChjaGFyICopYWRkcjsKLQotCQlpZiAocC0+dXNhZ2UgIT0gTlVMTCkgewotCQkJYWRkciA9ICh1bG9uZykocC0+dXNhZ2UpICsgZ2QtPnJlbG9jX29mZjsKLQkJCXAtPnVzYWdlID0gKGNoYXIgKilhZGRyOwotCQl9Ci0JI2lmZGVmCUNPTkZJR19TWVNfTE9OR0hFTFAKLQkJaWYgKHAtPmhlbHAgIT0gTlVMTCkgewotCQkJYWRkciA9ICh1bG9uZykocC0+aGVscCkgKyBnZC0+cmVsb2Nfb2ZmOwotCQkJcC0+aGVscCA9IChjaGFyICopYWRkcjsKLQkJfQotCSNlbmRpZgotCX0KLSNlbmRpZgogCS8qIGNvbmZpZ3VyZSBhdmFpbGFibGUgRkxBU0ggYmFua3MgKi8KIAlzaXplID0gZmxhc2hfaW5pdCgpOwogCWRpc3BsYXlfZmxhc2hfY29uZmlnKHNpemUpOwpkaWZmIC0tZ2l0IGEvbGliX2kzODYvaW50ZXJydXB0cy5jIGIvbGliX2kzODYvaW50ZXJydXB0cy5jCmluZGV4IDNmMzYxM2EuLjUxZGVmNTkgMTAwNjQ0Ci0tLSBhL2xpYl9pMzg2L2ludGVycnVwdHMuYworKysgYi9saWJfaTM4Ni9pbnRlcnJ1cHRzLmMKQEAgLTcwLDEyICs3MCwxMiBAQAogCiAJaWYgKGlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIgIT0gTlVMTCkKIAkJcHJpbnRmKCJpcnFfaW5zdGFsbF9oYW5kbGVyOiAweCUwOGx4IHJlcGxhY2luZyAweCUwOGx4XG4iLAotCQkgICAgICAgKHVsb25nKSBoYW5kbGVyICsgZ2QtPnJlbG9jX29mZiwKKwkJICAgICAgICh1bG9uZykgaGFuZGxlciwKIAkJICAgICAgICh1bG9uZykgaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlcik7CiAKIAlzdGF0dXMgPSBkaXNhYmxlX2ludGVycnVwdHMgKCk7CiAKLQlpcnFfaGFuZGxlcnNbaXJxXS5oYW5kbGVyID0gaGFuZGxlciArIGdkLT5yZWxvY19vZmY7CisJaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlciA9IGhhbmRsZXI7CiAJaXJxX2hhbmRsZXJzW2lycV0uYXJnID0gYXJnOwogCWlycV9oYW5kbGVyc1tpcnFdLmNvdW50ID0gMDsKIApAQCAtMTA5LDggKzEwOSwxMCBAQAogCXJldHVybjsKIH0KIAotX19pc3JfXyBkb19pcnEoaW50IGlycSkKK3ZvaWQgZG9faXJxKGludCBod19pcnEpCiB7CisJaW50IGlycSA9IGh3X2lycSAtIDB4MjA7CisKIAlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gQ09ORklHX1NZU19OVU1fSVJRUykgewogCQlwcmludGYoImRvX2lycTogYmFkIGlycSBudW1iZXIgJWRcbiIsIGlycSk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2xpYl9pMzg2L3BjYXRfaW50ZXJydXB0cy5jIGIvbGliX2kzODYvcGNhdF9pbnRlcnJ1cHRzLmMKaW5kZXggZjAxMjk4ZS4uNjdlNmU5NyAxMDA2NDQKLS0tIGEvbGliX2kzODYvcGNhdF9pbnRlcnJ1cHRzLmMKKysrIGIvbGliX2kzODYvcGNhdF9pbnRlcnJ1cHRzLmMKQEAgLTQwLDQ1ICs0MCwxMiBAQAogI2Vycm9yICJDT05GSUdfU1lTX05VTV9JUlFTIG11c3QgZXF1YWwgMTYgaWYgQ09ORklHX1NZU19OVU1fSVJRUyBpcyBkZWZpbmVkIgogI2VuZGlmCiAKLURFQ0xBUkVfSU5URVJSVVBUKDApOwotREVDTEFSRV9JTlRFUlJVUFQoMSk7Ci1ERUNMQVJFX0lOVEVSUlVQVCgzKTsKLURFQ0xBUkVfSU5URVJSVVBUKDQpOwotREVDTEFSRV9JTlRFUlJVUFQoNSk7Ci1ERUNMQVJFX0lOVEVSUlVQVCg2KTsKLURFQ0xBUkVfSU5URVJSVVBUKDcpOwotREVDTEFSRV9JTlRFUlJVUFQoOCk7Ci1ERUNMQVJFX0lOVEVSUlVQVCg5KTsKLURFQ0xBUkVfSU5URVJSVVBUKDEwKTsKLURFQ0xBUkVfSU5URVJSVVBUKDExKTsKLURFQ0xBUkVfSU5URVJSVVBUKDEyKTsKLURFQ0xBUkVfSU5URVJSVVBUKDEzKTsKLURFQ0xBUkVfSU5URVJSVVBUKDE0KTsKLURFQ0xBUkVfSU5URVJSVVBUKDE1KTsKLQogaW50IGludGVycnVwdF9pbml0KHZvaWQpCiB7CiAJdTggaTsKIAogCWRpc2FibGVfaW50ZXJydXB0cygpOwogCi0JLyogU2V0dXAgaW50ZXJydXB0cyAqLwotCXNldF92ZWN0b3IoMHgyMCwgaXJxXzApOwotCXNldF92ZWN0b3IoMHgyMSwgaXJxXzEpOwotCXNldF92ZWN0b3IoMHgyMywgaXJxXzMpOwotCXNldF92ZWN0b3IoMHgyNCwgaXJxXzQpOwotCXNldF92ZWN0b3IoMHgyNSwgaXJxXzUpOwotCXNldF92ZWN0b3IoMHgyNiwgaXJxXzYpOwotCXNldF92ZWN0b3IoMHgyNywgaXJxXzcpOwotCXNldF92ZWN0b3IoMHgyOCwgaXJxXzgpOwotCXNldF92ZWN0b3IoMHgyOSwgaXJxXzkpOwotCXNldF92ZWN0b3IoMHgyYSwgaXJxXzEwKTsKLQlzZXRfdmVjdG9yKDB4MmIsIGlycV8xMSk7Ci0Jc2V0X3ZlY3RvcigweDJjLCBpcnFfMTIpOwotCXNldF92ZWN0b3IoMHgyZCwgaXJxXzEzKTsKLQlzZXRfdmVjdG9yKDB4MmUsIGlycV8xNCk7Ci0Jc2V0X3ZlY3RvcigweDJmLCBpcnFfMTUpOwotCiAJLyogTWFzayBhbGwgaW50ZXJydXB0cyAqLwogCW91dGIoMHhmZiwgTUFTVEVSX1BJQyArIElNUik7CiAJb3V0YigweGZmLCBTTEFWRV9QSUMgKyBJTVIpOwpkaWZmIC0tZ2l0IGEvbGliX2kzODYvcGNhdF90aW1lci5jIGIvbGliX2kzODYvcGNhdF90aW1lci5jCmluZGV4IGMzNTFiMjMuLjEzNzNmZDEgMTAwNjQ0Ci0tLSBhL2xpYl9pMzg2L3BjYXRfdGltZXIuYworKysgYi9saWJfaTM4Ni9wY2F0X3RpbWVyLmMKQEAgLTcxLDcgKzcxLDcgQEAKIH0KIAogLyogdGhpcyBpcyBub3QgdmVyeSBleGFjdCAqLwotdm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAlpbnQgY291bnRlcjsKIAlpbnQgd3JhcHM7CmRpZmYgLS1naXQgYS9saWJfaTM4Ni9yZWFsbW9kZS5jIGIvbGliX2kzODYvcmVhbG1vZGUuYwppbmRleCA2Y2YyNzM4Li4zYzNjMWZjIDEwMDY0NAotLS0gYS9saWJfaTM4Ni9yZWFsbW9kZS5jCisrKyBiL2xpYl9pMzg2L3JlYWxtb2RlLmMKQEAgLTMxLDEwICszMSwxNSBAQAogI2RlZmluZSBSRUFMTU9ERV9NQUlMQk9YICgoY2hhciopMHhlMDApCiAKIAorZXh0ZXJuIHVsb25nIF9pMzg2Ym9vdF9yZWFsbW9kZTsKK2V4dGVybiB1bG9uZyBfaTM4NmJvb3RfcmVhbG1vZGVfc2l6ZTsKIGV4dGVybiBjaGFyIHJlYWxtb2RlX2VudGVyOwogCiBpbnQgcmVhbG1vZGVfc2V0dXAodm9pZCkKIHsKKwl1bG9uZyBpMzg2Ym9vdF9yZWFsbW9kZSAgICAgID0gKHVsb25nKSZfaTM4NmJvb3RfcmVhbG1vZGU7CisJdWxvbmcgaTM4NmJvb3RfcmVhbG1vZGVfc2l6ZSA9ICh1bG9uZykmX2kzODZib290X3JlYWxtb2RlX3NpemU7CisKIAkvKiBjb3B5IHRoZSByZWFsbW9kZSBzd2l0Y2ggY29kZSAqLwogCWlmIChpMzg2Ym9vdF9yZWFsbW9kZV9zaXplID4gKFJFQUxNT0RFX01BSUxCT1gtUkVBTE1PREVfQkFTRSkpIHsKIAkJcHJpbnRmKCJyZWFsbW9kZSBzd2l0Y2ggdG9vIGxhcmdlICglbGQgYnl0ZXMsIG1heCBpcyAlZClcbiIsCmRpZmYgLS1naXQgYS9saWJfaTM4Ni90aW1lci5jIGIvbGliX2kzODYvdGltZXIuYwppbmRleCA1OGEwMjEyLi41Y2IxZjU0IDEwMDY0NAotLS0gYS9saWJfaTM4Ni90aW1lci5jCisrKyBiL2xpYl9pMzg2L3RpbWVyLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAlpZiAobmV3X2Z1bmMgPT0gTlVMTCkKIAkJcmV0dXJuIDE7CiAKLQluZXdfZnVuYy0+aXNyX2Z1bmMgPSBpc3JfZnVuYyArIGdkLT5yZWxvY19vZmY7CisJbmV3X2Z1bmMtPmlzcl9mdW5jID0gaXNyX2Z1bmM7CiAJbmV3X2Z1bmMtPm5leHQgPSBOVUxMOwogCiAJLyoKZGlmZiAtLWdpdCBhL2xpYl9tNjhrL3RpbWUuYyBiL2xpYl9tNjhrL3RpbWUuYwppbmRleCAyOTI2OWY2Li43ZWFlYTVlIDEwMDY0NAotLS0gYS9saWJfbTY4ay90aW1lLmMKKysrIGIvbGliX202OGsvdGltZS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAjZW5kaWYKIGV4dGVybiB2b2lkIGR0aW1lcl9pbnRyX3NldHVwKHZvaWQpOwogCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl2b2xhdGlsZSBkdG1yX3QgKnRpbWVycCA9IChkdG1yX3QgKikgKENPTkZJR19TWVNfVURFTEFZX0JBU0UpOwogCXVpbnQgc3RhcnQsIG5vdywgdG1wOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBsYXN0aW5jOwogCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAl2b2xhdGlsZSBwaXRfdCAqdGltZXJwID0gKHBpdF90ICopIChDT05GSUdfU1lTX1VERUxBWV9CQVNFKTsKIAl1aW50IHRtcDsKZGlmZiAtLWdpdCBhL2xpYl9taWNyb2JsYXplL3RpbWUuYyBiL2xpYl9taWNyb2JsYXplL3RpbWUuYwppbmRleCBjYmI0MzQxLi5kYTAxNmEwIDEwMDY0NAotLS0gYS9saWJfbWljcm9ibGF6ZS90aW1lLmMKKysrIGIvbGliX21pY3JvYmxhemUvdGltZS5jCkBAIC0yNywxNCArMjcsMTQgQEAKICNpbmNsdWRlIDxjb21tb24uaD4KIAogI2lmZGVmIENPTkZJR19TWVNfVElNRVJfMAotdm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAlpbnQgaTsKIAlpID0gZ2V0X3RpbWVyICgwKTsKIAl3aGlsZSAoKGdldF90aW1lciAoMCkgLSBpKSA8ICh1c2VjIC8gMTAwMCkpIDsKIH0KICNlbHNlCi12b2lkIHVkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSAodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVuc2lnbmVkIGludCBpOwogCWZvciAoaSA9IDA7IGkgPCAodXNlYyAqIENPTkZJR19YSUxJTlhfQ0xPQ0tfRlJFUSAvIDEwMDAwMDAwKTsgaSsrKTsKZGlmZiAtLWdpdCBhL2xpYl9taXBzL3RpbWUuYyBiL2xpYl9taXBzL3RpbWUuYwppbmRleCAwN2UzNTZkLi4wZTY2NDQxIDEwMDY0NAotLS0gYS9saWJfbWlwcy90aW1lLmMKKysrIGIvbGliX21pcHMvdGltZS5jCkBAIC03MCw3ICs3MCw3IEBACiAJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvdW50KCkgKyBDWUNMRVNfUEVSX0pJRkZZKTsKIH0KIAotdm9pZCB1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCiB7CiAJdW5zaWduZWQgaW50IHRtbzsKIApkaWZmIC0tZ2l0IGEvbGliX25pb3MvdGltZS5jIGIvbGliX25pb3MvdGltZS5jCmluZGV4IDI1YTIzM2UuLmQ1MDk2ZWUgMTAwNjQ0Ci0tLSBhL2xpYl9uaW9zL3RpbWUuYworKysgYi9saWJfbmlvcy90aW1lLmMKQEAgLTI3LDEzICsyNywxMiBAQAogCiBleHRlcm4gdm9pZCBkbHlfY2xrcyggdW5zaWduZWQgbG9uZyB0aWNrcyApOwogCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAkvKiBUaGUgTmlvcyBjb3JlIGRvZXNuJ3QgaGF2ZSBhIHRpbWViYXNlLCBzbyB3ZSBkbyBvdXIKIAkgKiBiZXN0IGZvciBub3cgYW5kIGNhbGwgYSBsb3ctbGV2ZWwgbG9vcCB0aGF0IGNvdW50cwogCSAqIGNwdSBjbG9ja3MuCiAJICovCiAJdW5zaWduZWQgbG9uZyBjbnQgPSAoQ09ORklHX1NZU19DTEtfRlJFUS8xMDAwMDAwKSAqIHVzZWM7Ci0JV0FUQ0hET0dfUkVTRVQgKCk7CS8qIHRyaWdnZXIgd2F0Y2hkb2cgaWYgbmVlZGVkICovCiAJZGx5X2Nsa3MgKGNudCk7CiB9CmRpZmYgLS1naXQgYS9saWJfbmlvczIvdGltZS5jIGIvbGliX25pb3MyL3RpbWUuYwppbmRleCAyNWEyMzNlLi5kNTA5NmVlIDEwMDY0NAotLS0gYS9saWJfbmlvczIvdGltZS5jCisrKyBiL2xpYl9uaW9zMi90aW1lLmMKQEAgLTI3LDEzICsyNywxMiBAQAogCiBleHRlcm4gdm9pZCBkbHlfY2xrcyggdW5zaWduZWQgbG9uZyB0aWNrcyApOwogCi12b2lkIHVkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKIHsKIAkvKiBUaGUgTmlvcyBjb3JlIGRvZXNuJ3QgaGF2ZSBhIHRpbWViYXNlLCBzbyB3ZSBkbyBvdXIKIAkgKiBiZXN0IGZvciBub3cgYW5kIGNhbGwgYSBsb3ctbGV2ZWwgbG9vcCB0aGF0IGNvdW50cwogCSAqIGNwdSBjbG9ja3MuCiAJICovCiAJdW5zaWduZWQgbG9uZyBjbnQgPSAoQ09ORklHX1NZU19DTEtfRlJFUS8xMDAwMDAwKSAqIHVzZWM7Ci0JV0FUQ0hET0dfUkVTRVQgKCk7CS8qIHRyaWdnZXIgd2F0Y2hkb2cgaWYgbmVlZGVkICovCiAJZGx5X2Nsa3MgKGNudCk7CiB9CmRpZmYgLS1naXQgYS9saWJfcHBjL3RpbWUuYyBiL2xpYl9wcGMvdGltZS5jCmluZGV4IDE3M2ZmYWIuLjI5MDk5NjEgMTAwNjQ0Ci0tLSBhL2xpYl9wcGMvdGltZS5jCisrKyBiL2xpYl9wcGMvdGltZS5jCkBAIC0yMywxMCArMjMsNiBAQAogCiAjaW5jbHVkZSA8Y29tbW9uLmg+CiAKLSNpZm5kZWYgQ09ORklHX1dEX1BFUklPRAotIyBkZWZpbmUgQ09ORklHX1dEX1BFUklPRAkoMTAgKiAxMDAwICogMTAwMCkJLyogMTAgc2Vjb25kcyBkZWZhdWx0Ki8KLSNlbmRpZgotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qCkBAIC01NCwxNiArNTAsMTAgQEAKICAqIG1pY3Jvc2Vjb25kcyB0byB3YWl0KSBpbnRvIGEgbnVtYmVyIG9mIHRpbWUgYmFzZSB0aWNrczsgdGhlbiB3ZQogICogd2F0Y2ggdGhlIHRpbWUgYmFzZSB1bnRpbCBpdCBoYXMgaW5jcmVtZW50ZWQgYnkgdGhhdCBhbW91bnQuCiAgKi8KLXZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQogewotCXVsb25nIHRpY2tzLCBrdjsKLQotCWRvIHsKLQkJa3YgPSB1c2VjID4gQ09ORklHX1dEX1BFUklPRCA/IENPTkZJR19XRF9QRVJJT0QgOiB1c2VjOwotCQl0aWNrcyA9IHVzZWMydGlja3MgKGt2KTsKLQkJd2FpdF90aWNrcyAodGlja3MpOwotCQl1c2VjIC09IGt2OwotCX0gd2hpbGUodXNlYyk7CisJdWxvbmcgdGlja3MgPSB1c2VjMnRpY2tzICh1c2VjKTsKKwl3YWl0X3RpY2tzICh0aWNrcyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2xpYl9zaC90aW1lLmMgYi9saWJfc2gvdGltZS5jCmluZGV4IDUyZGJjZDAuLjlhOGY4OWEgMTAwNjQ0Ci0tLSBhL2xpYl9zaC90aW1lLmMKKysrIGIvbGliX3NoL3RpbWUuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJcmV0dXJuIDAgLSByZWFkbChUQ05UMCk7CiB9CiAKLXZvaWQgdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCit2b2lkIF9fdWRlbGF5ICh1bnNpZ25lZCBsb25nIHVzZWMpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKIAl1bG9uZyB0bW87CmRpZmYgLS1naXQgYS9saWJfc2gvdGltZV9zaDIuYyBiL2xpYl9zaC90aW1lX3NoMi5jCmluZGV4IDVjNmM5ZDQuLjc4OWI0NmYgMTAwNjQ0Ci0tLSBhL2xpYl9zaC90aW1lX3NoMi5jCisrKyBiL2xpYl9zaC90aW1lX3NoMi5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAljbXRfdGltZXJfc3RhcnQoMCk7CiB9CiAKLXZvaWQgdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlYykKK3ZvaWQgX191ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQogewogCXVuc2lnbmVkIGxvbmcgZW5kID0gZ2V0X3VzZWMoKSArIHVzZWM7CiAKZGlmZiAtLWdpdCBhL2xpYl9zcGFyYy90aW1lLmMgYi9saWJfc3BhcmMvdGltZS5jCmluZGV4IDQzM2YzZWIuLjgyYjJhM2EgMTAwNjQ0Ci0tLSBhL2xpYl9zcGFyYy90aW1lLmMKKysrIGIvbGliX3NwYXJjL3RpbWUuYwpAQCAtNTMsNyArNTMsNyBAQAogICogbWljcm9zZWNvbmRzIHRvIHdhaXQpIGludG8gYSBudW1iZXIgb2YgdGltZSBiYXNlIHRpY2tzOyB0aGVuIHdlCiAgKiB3YXRjaCB0aGUgdGltZSBiYXNlIHVudGlsIGl0IGhhcyBpbmNyZW1lbnRlZCBieSB0aGF0IGFtb3VudC4KICAqLwotdm9pZCB1ZGVsYXkodW5zaWduZWQgbG9uZyB1c2VjKQordm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWMpCiB7CiAJdWxvbmcgdGlja3MgPSB1c2VjMnRpY2tzKHVzZWMpOwogCmRpZmYgLS1naXQgYS9ta2NvbmZpZyBiL21rY29uZmlnCmluZGV4IDEwNzU1MTAuLjI3ZDlmMmIgMTAwNzU1Ci0tLSBhL21rY29uZmlnCisrKyBiL21rY29uZmlnCkBAIC03OSw2ICs3OSwxMyBAQAogCiBbICIkNiIgXSAmJiBbICIkNiIgIT0gIk5VTEwiIF0gJiYgZWNobyAiU09DICAgID0gJDYiID4+IGNvbmZpZy5tawogCisjIEFzc2lnbiBib2FyZCBkaXJlY3RvcnkgdG8gQk9BUkRJUiB2YXJpYWJsZQoraWYgWyAteiAiJDUiIC1vICIkNSIgPSAiTlVMTCIgXSA7IHRoZW4KKyAgICBCT0FSRERJUj0kNAorZWxzZQorICAgIEJPQVJERElSPSQ1LyQ0CitmaQorCiAjCiAjIENyZWF0ZSBib2FyZCBzcGVjaWZpYyBoZWFkZXIgZmlsZQogIwpAQCAtOTQsNiArMTAxLDggQEAKIAllY2hvICIjZGVmaW5lIENPTkZJR19NS18ke2l9IDEiID4+Y29uZmlnLmggOwogZG9uZQogCitlY2hvICIjZGVmaW5lIENPTkZJR19CT0FSRERJUiBib2FyZC8kQk9BUkRESVIiID4+Y29uZmlnLmgKKwogZWNobyAiI2luY2x1ZGUgPGNvbmZpZ3MvJDEuaD4iID4+Y29uZmlnLmgKIGVjaG8gIiNpbmNsdWRlIDxhc20vY29uZmlnLmg+IiA+PmNvbmZpZy5oCiAKZGlmZiAtLWdpdCBhL3Bvc3QvcG9zdC5jIGIvcG9zdC9wb3N0LmMKaW5kZXggYjc0ZTc2Mi4uYjI5ZWI4NyAxMDA2NDQKLS0tIGEvcG9zdC9wb3N0LmMKKysrIGIvcG9zdC9wb3N0LmMKQEAgLTU4LDYgKzU4LDIyIEBACiAJcmV0dXJuIHJlczsKIH0KIAorLyoKKyAqIFN1cHBseSBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHBvc3RfaG90a2V5c19wcmVzc2VkKCkgZm9yIGJvYXJkcworICogd2l0aG91dCBob3RrZXkgc3VwcG9ydC4gV2UgYWx3YXlzIHJldHVybiAwIGhlcmUsIHNvIHRoYXQgdGhlCisgKiBsb25nLXJ1bm5pbmcgdGVzdHMgd29uJ3QgYmUgc3RhcnRlZC4KKyAqCisgKiBCb2FyZHMgd2l0aCBob3RrZXkgc3VwcG9ydCBjYW4gb3ZlcnJpZGUgdGhpcyB3ZWFrIGRlZmF1bHQgZnVuY3Rpb24KKyAqIGJ5IGRlZmluaW5nIG9uZSBpbiB0aGVpciBib2FyZCBzcGVjaWZpYyBjb2RlLgorICovCitpbnQgX19wb3N0X2hvdGtleXNfcHJlc3NlZCh2b2lkKQoreworCXJldHVybiAwOwkvKiBObyBob3RrZXlzIHN1cHBvcnRlZCAqLworfQoraW50IHBvc3RfaG90a2V5c19wcmVzc2VkKHZvaWQpCisJX19hdHRyaWJ1dGVfXygod2VhaywgYWxpYXMoIl9fcG9zdF9ob3RrZXlzX3ByZXNzZWQiKSkpOworCisKIHZvaWQgcG9zdF9ib290bW9kZV9pbml0ICh2b2lkKQogewogCWludCBib290bW9kZSA9IHBvc3RfYm9vdG1vZGVfZ2V0ICgwKTsKZGlmZiAtLWdpdCBhL3J1bGVzLm1rIGIvcnVsZXMubWsKaW5kZXggNmY5OTlkZC4uYzE2NzBhYyAxMDA2NDQKLS0tIGEvcnVsZXMubWsKKysrIGIvcnVsZXMubWsKQEAgLTI1LDExICsyNSwyMCBAQAogCiBfZGVwZW5kOgkkKG9iaikuZGVwZW5kCiAKLSQob2JqKS5kZXBlbmQ6CSQoc3JjKU1ha2VmaWxlICQoVE9QRElSKS9jb25maWcubWsgJChTUkNTKQorJChvYmopLmRlcGVuZDoJJChzcmMpTWFrZWZpbGUgJChUT1BESVIpL2NvbmZpZy5tayAkKFNSQ1MpICQoSE9TVFNSQ1MpCiAJCUBybSAtZiAkQAogCQlAZm9yIGYgaW4gJChTUkNTKTsgZG8gXAogCQkJZz1gYmFzZW5hbWUgJCRmIHwgc2VkIC1lICdzL1woLipcKVwuXHcvXDEuby8nYDsgXAotCQkJJChDQykgLU0gJChIT1NUQ0ZMQUdTKSAkKENQUEZMQUdTKSAtTVEgJChvYmopJCRnICQkZiA+PiAkQCA7IFwKKwkJCSQoQ0MpIC1NICQoQ1BQRkxBR1MpIC1NUSAkKG9iaikkJGcgJCRmID4+ICRAIDsgXAorCQlkb25lCisJCUBmb3IgZiBpbiAkKEhPU1RTUkNTKTsgZG8gXAorCQkJZz1gYmFzZW5hbWUgJCRmIHwgc2VkIC1lICdzL1woLipcKVwuXHcvXDEuby8nYDsgXAorCQkJJChIT1NUQ0MpIC1NICQoSE9TVENQUEZMQUdTKSAtTVEgJChvYmopJCRnICQkZiA+PiAkQCA7IFwKIAkJZG9uZQogCiskKEhPU1RPQkpTKTogJChvYmopJS5vOiAlLmMKKwkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpICQoSE9TVENGTEFHU18kKEJDVVJESVIpKSAtbyAkQCAkPCAtYworJChOT1BFRE9CSlMpOiAkKG9iaiklLm86ICUuYworCSQoSE9TVENDKSAkKEhPU1RDRkxBR1NfTk9QRUQpICQoSE9TVENGTEFHU18kKEBGKSkgJChIT1NUQ0ZMQUdTXyQoQkNVUkRJUikpIC1vICRAICQ8IC1jCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlIGIvdG9vbHMvTWFrZWZpbGUKaW5kZXggYjA0ZTNmMy4uNWI4YzNjMyAxMDA2NDQKLS0tIGEvdG9vbHMvTWFrZWZpbGUKKysrIGIvdG9vbHMvTWFrZWZpbGUKQEAgLTI0LDMzICsyNCw2IEBACiBUT09MU1VCRElSUyA9CiAKICMKLSMgTWFjIE9TIFggLyBEYXJ3aW4ncyBDIHByZXByb2Nlc3NvciBpcyBBcHBsZSBzcGVjaWZpYy4gIEl0Ci0jIGdlbmVyYXRlcyBudW1lcm91cyBlcnJvcnMgYW5kIHdhcm5pbmdzLiAgV2Ugd2FudCB0byBieXBhc3MgaXQKLSMgYW5kIHVzZSBHTlUgQydzIGNwcC4gIFRvIGRvIHRoaXMgd2UgcGFzcyB0aGUgLXRyYWRpdGlvbmFsLWNwcAotIyBvcHRpb24gdG8gdGhlIGNvbXBpbGVyLiAgTm90ZSB0aGF0IHRoZSAtdHJhZGl0aW9uYWwtY3BwIGZsYWcKLSMgRE9FUyBOT1QgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgR05VIEMncyBmbGFnLCBhbGwgaXQgZG9lcwotIyBpcyBpbnZva2UgdGhlIEdOVSBwcmVwcm9jZXNzb3IgaW4gc3RvY2sgQU5TSS9JU08gQyBmYXNoaW9uLgotIwotIyBBcHBsZSdzIGxpbmtlciBpcyBzaW1pbGFyLCB0aGFua3MgdG8gdGhlIG5ldyAyIHN0YWdlIGxpbmtpbmcKLSMgbXVsdGlwbGUgc3ltYm9sIGRlZmluaXRpb25zIGFyZSB0cmVhdGVkIGFzIGVycm9ycywgaGVuY2UgdGhlCi0jIC1tdWx0aXBseV9kZWZpbmVkIHN1cHByZXNzIG9wdGlvbiB0byB0dXJuIG9mZiB0aGlzIGVycm9yLgotIwotCi1IT1NUQ0ZMQUdTID0gLVdhbGwKLUhPU1RfTERGTEFHUyA9Ci0KLWlmZXEgKCQoSE9TVE9TKS0kKEhPU1RBUkNIKSxkYXJ3aW4tcHBjKQotSE9TVENGTEFHUyArPSAtdHJhZGl0aW9uYWwtY3BwCi1IT1NUX0xERkxBR1MgKz0gLW11bHRpcGx5X2RlZmluZWQgc3VwcHJlc3MKLWVsc2UKLUhPU1RDRkxBR1MgKz0gLXBlZGFudGljCi1lbmRpZgotCi1pZmVxICgkKEhPU1RPUyksY3lnd2luKQotSE9TVENGTEFHUyArPSAtYW5zaQotZW5kaWYKLQotIwogIyB0b29sY2hhaW5zIHRhcmdldGluZyB3aW4zMiBnZW5lcmF0ZSAuZXhlIGZpbGVzCiAjCiBpZm5lcSAoLCQoZmluZHN0cmluZyBXSU4zMiAsJChzaGVsbCAkKEhPU1RDQykgLUUgLWRNIC14YyAvZGV2L251bGwpKSkKQEAgLTkzLDE2ICs2NiwxNiBAQAogIyBTb3VyY2UgZmlsZXMgbG9jYXRlZCBpbiB0aGUgdG9vbHMgZGlyZWN0b3J5CiBPQkpfRklMRVMtJChDT05GSUdfTENEX0xPR08pICs9IGJtcF9sb2dvLm8KIE9CSl9GSUxFUy0kKENPTkZJR19WSURFT19MT0dPKSArPSBibXBfbG9nby5vCi1PQkpfRklMRVMteSArPSBkZWZhdWx0X2ltYWdlLm8KLU9CSl9GSUxFUy0kKENPTkZJR19FTlZfSVNfRU1CRURERUQpICs9IGVudmNyYy5vCi1PQkpfRklMRVMteSArPSBmaXRfaW1hZ2UubworTk9QRURfT0JKX0ZJTEVTLXkgKz0gZGVmYXVsdF9pbWFnZS5vCitPQkpfRklMRVMteSArPSBlbnZjcmMubworTk9QRURfT0JKX0ZJTEVTLXkgKz0gZml0X2ltYWdlLm8KIE9CSl9GSUxFUy0kKENPTkZJR19DTURfTkVUKSArPSBnZW5fZXRoX2FkZHIubwogT0JKX0ZJTEVTLSQoQ09ORklHX0NNRF9MT0FEUykgKz0gaW1nMnNyZWMubwogT0JKX0ZJTEVTLSQoQ09ORklHX0lOQ0FfSVApICs9IGluY2Etc3dhcC1ieXRlcy5vCi1PQkpfRklMRVMteSArPSBrd2JpbWFnZS5vCi1PQkpfRklMRVMteSArPSBta2ltYWdlLm8KK05PUEVEX09CSl9GSUxFUy15ICs9IGt3YmltYWdlLm8KK05PUEVEX09CSl9GSUxFUy15ICs9IG1raW1hZ2UubwogT0JKX0ZJTEVTLSQoQ09ORklHX05FVENPTlNPTEUpICs9IG5jYi5vCi1PQkpfRklMRVMteSArPSBvc19zdXBwb3J0Lm8KK05PUEVEX09CSl9GSUxFUy15ICs9IG9zX3N1cHBvcnQubwogT0JKX0ZJTEVTLSQoQ09ORklHX1NIQTFfQ0hFQ0tfVUJfSU1HKSArPSB1YnNoYTEubwogCiAjIERvbid0IGJ1aWxkIGJ5IGRlZmF1bHQKQEAgLTEzNCw1NyArMTA3LDUyIEBACiBlbmRpZgogCiAjIG5vdyAkKG9iaikgaXMgZGVmaW5lZAotU1JDUwkrPSAkKGFkZHByZWZpeCAkKFNSQ1RSRUUpLywkKEVYVF9PQkpfRklMRVMteToubz0uYykpCi1TUkNTCSs9ICQoYWRkcHJlZml4ICQoU1JDVFJFRSkvdG9vbHMvLCQoT0JKX0ZJTEVTLXk6Lm89LmMpKQotU1JDUwkrPSAkKGFkZHByZWZpeCAkKFNSQ1RSRUUpL2xpYmZkdC8sJChMSUJGRFRfT0JKX0ZJTEVTLXk6Lm89LmMpKQorSE9TVFNSQ1MgKz0gJChhZGRwcmVmaXggJChTUkNUUkVFKS8sJChFWFRfT0JKX0ZJTEVTLXk6Lm89LmMpKQorSE9TVFNSQ1MgKz0gJChhZGRwcmVmaXggJChTUkNUUkVFKS90b29scy8sJChPQkpfRklMRVMteToubz0uYykpCitIT1NUU1JDUyArPSAkKGFkZHByZWZpeCAkKFNSQ1RSRUUpL2xpYmZkdC8sJChMSUJGRFRfT0JKX0ZJTEVTLXk6Lm89LmMpKQogQklOUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChzb3J0ICQoQklOX0ZJTEVTLXkpKSkKIExJQkZEVF9PQkpTCTo9ICQoYWRkcHJlZml4ICQob2JqKSwkKExJQkZEVF9PQkpfRklMRVMteSkpCiAKK0hPU1RPQkpTIDo9ICQoYWRkcHJlZml4ICQob2JqKSwkKE9CSl9GSUxFUy15KSkKK05PUEVET0JKUyA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChOT1BFRF9PQkpfRklMRVMteSkpCisKICMKICMgVXNlIG5hdGl2ZSB0b29scyBhbmQgb3B0aW9ucwogIyBEZWZpbmUgX19LRVJORUxfU1RSSUNUX05BTUVTIHRvIHByZXZlbnQgdHlwZWRlZiBvdmVybGFwcwogIwotQ1BQRkxBR1MgICA9IC1pZGlyYWZ0ZXIgJChTUkNUUkVFKS9pbmNsdWRlIFwKK0hPU1RDUFBGTEFHUyA9CS1pZGlyYWZ0ZXIgJChTUkNUUkVFKS9pbmNsdWRlIFwKIAkJLWlkaXJhZnRlciAkKE9CSlRSRUUpL2luY2x1ZGUyIFwKIAkJLWlkaXJhZnRlciAkKE9CSlRSRUUpL2luY2x1ZGUgXAogCSAgICAgICAgLUkgJChTUkNUUkVFKS9saWJmZHQgXAogCQktSSAkKFNSQ1RSRUUpL3Rvb2xzIFwKIAkJLURURVhUX0JBU0U9JChURVhUX0JBU0UpIC1EVVNFX0hPU1RDQyBcCiAJCS1EX19LRVJORUxfU1RSSUNUX05BTUVTCi1DRkxBR1MgICAgID0gJChIT1NUQ0ZMQUdTKSAkKENQUEZMQUdTKSAtTwogCi0jIE5vIC1wZWRhbnRpYyBzd2l0Y2ggdG8gYXZvaWQgbGliZmR0IGNvbXBpbGF0aW9uIHdhcm5pbmdzCi1GSVRfQ0ZMQUdTID0gLVdhbGwgJChDUFBGTEFHUykgLU8KLQotQUZMQUdTCSAgID0gLURfX0FTU0VNQkxZX18gJChDUFBGTEFHUykKLUNDCSAgID0gJChIT1NUQ0MpCi1TVFJJUAkgICA9ICQoSE9TVFNUUklQKQotTUFLRURFUEVORCA9IG1ha2VkZXBlbmQKIAogYWxsOgkkKG9iaikuZGVwZW5kICQoQklOUykgJChMT0dPLXkpIHN1YmRpcnMKIAogJChvYmopYmluMmhlYWRlciQoU0ZYKTogJChvYmopYmluMmhlYWRlci5vCi0JJChDQykgJChDRkxBR1MpICQoSE9TVF9MREZMQUdTKSAtbyAkQCAkXgotCSQoU1RSSVApICRACisJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgJChIT1NUTERGTEFHUykgLW8gJEAgJF4KKwkkKEhPU1RTVFJJUCkgJEAKIAogJChvYmopYm1wX2xvZ28kKFNGWCk6CSQob2JqKWJtcF9sb2dvLm8KLQkkKENDKSAkKENGTEFHUykgJChIT1NUX0xERkxBR1MpIC1vICRAICReCi0JJChTVFJJUCkgJEAKKwkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RMREZMQUdTKSAtbyAkQCAkXgorCSQoSE9TVFNUUklQKSAkQAogCiAkKG9iaillbnZjcmMkKFNGWCk6CSQob2JqKWNyYzMyLm8gJChvYmopZW52X2VtYmVkZGVkLm8gJChvYmopZW52Y3JjLm8gJChvYmopc2hhMS5vCi0JJChDQykgJChDRkxBR1MpIC1vICRAICReCisJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgJChIT1NUTERGTEFHUykgLW8gJEAgJF4KIAogJChvYmopZ2VuX2V0aF9hZGRyJChTRlgpOgkkKG9iailnZW5fZXRoX2FkZHIubwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEhPU1RfTERGTEFHUykgLW8gJEAgJF4KLQkkKFNUUklQKSAkQAorCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCisJJChIT1NUU1RSSVApICRACiAKICQob2JqKWltZzJzcmVjJChTRlgpOgkkKG9iailpbWcyc3JlYy5vCi0JJChDQykgJChDRkxBR1MpICQoSE9TVF9MREZMQUdTKSAtbyAkQCAkXgotCSQoU1RSSVApICRACisJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgJChIT1NUTERGTEFHUykgLW8gJEAgJF4KKwkkKEhPU1RTVFJJUCkgJEAKIAogJChvYmopaW5jYS1zd2FwLWJ5dGVzJChTRlgpOgkkKG9iailpbmNhLXN3YXAtYnl0ZXMubwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEhPU1RfTERGTEFHUykgLW8gJEAgJF4KLQkkKFNUUklQKSAkQAorCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCisJJChIT1NUU1RSSVApICRACiAKICQob2JqKW1raW1hZ2UkKFNGWCk6CSQob2JqKWNyYzMyLm8gXAogCQkJJChvYmopZGVmYXVsdF9pbWFnZS5vIFwKQEAgLTE5Niw0OCArMTY0LDI5IEBACiAJCQkkKG9iailvc19zdXBwb3J0Lm8gXAogCQkJJChvYmopc2hhMS5vIFwKIAkJCSQoTElCRkRUX09CSlMpCi0JJChDQykgJChDRkxBR1MpICQoSE9TVF9MREZMQUdTKSAtbyAkQCAkXgotCSQoU1RSSVApICRACisJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgJChIT1NUTERGTEFHUykgLW8gJEAgJF4KKwkkKEhPU1RTVFJJUCkgJEAKIAogJChvYmopbXBjODZ4X2NsayQoU0ZYKToJJChvYmopbXBjODZ4X2Nsay5vCi0JJChDQykgJChDRkxBR1MpICQoSE9TVF9MREZMQUdTKSAtbyAkQCAkXgotCSQoU1RSSVApICRACisJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgJChIT1NUTERGTEFHUykgLW8gJEAgJF4KKwkkKEhPU1RTVFJJUCkgJEAKIAogJChvYmopbmNiJChTRlgpOgkkKG9iailuY2IubwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEhPU1RfTERGTEFHUykgLW8gJEAgJF4KLQkkKFNUUklQKSAkQAorCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCisJJChIT1NUU1RSSVApICRACiAKICQob2JqKXVic2hhMSQoU0ZYKToJJChvYmopb3Nfc3VwcG9ydC5vICQob2JqKXNoYTEubyAkKG9iail1YnNoYTEubwotCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXgotCi0jIFNvbWUgZmlsZXMgY29tcGxhaW4gaWYgY29tcGlsZWQgd2l0aCAtcGVkYW50aWMsIHVzZSBGSVRfQ0ZMQUdTCi0kKG9iailkZWZhdWx0X2ltYWdlLm86ICQoU1JDVFJFRSkvdG9vbHMvZGVmYXVsdF9pbWFnZS5jCi0JJChDQykgLWcgJChGSVRfQ0ZMQUdTKSAtYyAtbyAkQCAkPAotCi0kKG9iailmaXRfaW1hZ2UubzogJChTUkNUUkVFKS90b29scy9maXRfaW1hZ2UuYwotCSQoQ0MpIC1nICQoRklUX0NGTEFHUykgLWMgLW8gJEAgJDwKLQotJChvYmopaW1hZ2UubzogJChTUkNUUkVFKS9jb21tb24vaW1hZ2UuYwotCSQoQ0MpIC1nICQoRklUX0NGTEFHUykgLWMgLW8gJEAgJDwKLQotJChvYmopa3diaW1hZ2UubzogJChTUkNUUkVFKS90b29scy9rd2JpbWFnZS5jCi0JJChDQykgLWcgJChGSVRfQ0ZMQUdTKSAtYyAtbyAkQCAkPAotCi0kKG9iailta2ltYWdlLm86ICQoU1JDVFJFRSkvdG9vbHMvbWtpbWFnZS5jCi0JJChDQykgLWcgJChGSVRfQ0ZMQUdTKSAtYyAtbyAkQCAkPAotCi0kKG9iailvc19zdXBwb3J0Lm86ICQoU1JDVFJFRSkvdG9vbHMvb3Nfc3VwcG9ydC5jCi0JJChDQykgLWcgJChGSVRfQ0ZMQUdTKSAtYyAtbyAkQCAkPAorCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCiAKICMgU29tZSBvZiB0aGUgdG9vbCBvYmplY3RzIG5lZWQgdG8gYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHRoZSB0b29scyBkaXJlY3RvcnkKICQob2JqKSUubzogJChTUkNUUkVFKS9jb21tb24vJS5jCi0JJChDQykgLWcgJChGSVRfQ0ZMQUdTKSAtYyAtbyAkQCAkPAorCSQoSE9TVENDKSAtZyAkKEhPU1RDRkxBR1NfTk9QRUQpIC1jIC1vICRAICQ8CiAKICQob2JqKSUubzogJChTUkNUUkVFKS9saWJfZ2VuZXJpYy8lLmMKLQkkKENDKSAtZyAkKENGTEFHUykgLWMgLW8gJEAgJDwKKwkkKEhPU1RDQykgLWcgJChIT1NUQ0ZMQUdTKSAtYyAtbyAkQCAkPAogCiAkKExJQkZEVF9PQkpTKToKLQkkKENDKSAtZyAkKEZJVF9DRkxBR1MpIC1jIC1vICRAICQ8CisJJChIT1NUQ0MpIC1nICQoSE9TVENGTEFHU19OT1BFRCkgLWMgLW8gJEAgJDwKIAogc3ViZGlyczoKIGlmZXEgKCQoVE9PTFNVQkRJUlMpLCkKQEAgLTI0Nyw4ICsxOTYsNiBAQAogCSAgICAkKE1BS0UpIFwKIAkJSE9TVE9TPSQoSE9TVE9TKSBcCiAJCUhPU1RBUkNIPSQoSE9TVEFSQ0gpIFwKLQkJSE9TVENGTEFHUz0iJChIT1NUQ0ZMQUdTKSIgXAotCQlIT1NUX0xERkxBR1M9IiQoSE9TVF9MREZMQUdTKSIgXAogCQktQyAkJGRpciB8fCBleGl0IDEgOyBcCiAJZG9uZQogZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2Vhc3lsb2dvL01ha2VmaWxlIGIvdG9vbHMvZWFzeWxvZ28vTWFrZWZpbGUKaW5kZXggNTY2YjEyNS4uZDhlMjhiMCAxMDA2NDQKLS0tIGEvdG9vbHMvZWFzeWxvZ28vTWFrZWZpbGUKKysrIGIvdG9vbHMvZWFzeWxvZ28vTWFrZWZpbGUKQEAgLTEsOCArMSwxMSBAQAotQ0ZMQUdTICs9IC1XYWxsCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotYWxsOiBlYXN5bG9nbworYWxsOiAkKG9iaillYXN5bG9nbworCiskKG9iaillYXN5bG9nbzogJChTUkNUUkVFKS90b29scy9lYXN5bG9nby9lYXN5bG9nby5jCisJJChIT1NUQ0MpICQoSE9TVENGTEFHU19OT1BFRCkgJChIT1NUTERGTEFHUykgLW8gJEAgJF4KIAogY2xlYW46Ci0Jcm0gLWYgZWFzeWxvZ28gKi5vCisJcm0gLWYgJChvYmopZWFzeWxvZ28KIAogLlBIT05ZOiBhbGwgY2xlYW4KZGlmZiAtLWdpdCBhL3Rvb2xzL2dkYi9NYWtlZmlsZSBiL3Rvb2xzL2dkYi9NYWtlZmlsZQppbmRleCAwYTU2ODdkLi45MDAzN2M3IDEwMDY0NAotLS0gYS90b29scy9nZGIvTWFrZWZpbGUKKysrIGIvdG9vbHMvZ2RiL01ha2VmaWxlCkBAIC0zMCwxNyArMzAsMTQgQEAKIAogQ09CSlMJPSBnZGJzZW5kLm8gZ2RiY29udC5vIGVycm9yLm8gcmVtb3RlLm8gc2VyaWFsLm8KIAotT0JKUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCi1TUkNTCTo9ICQoQ09CSlM6Lm89LmMpCitIT1NUT0JKUyA6PSAkKGFkZHByZWZpeCAkKG9iaiksJChDT0JKUykpCitIT1NUU1JDUyA6PSAkKENPQkpTOi5vPS5jKQogQklOUwk6PSAkKGFkZHByZWZpeCAkKG9iaiksJChCSU5TKSkKIAogIwogIyBVc2UgbmF0aXZlIHRvb2xzIGFuZCBvcHRpb25zCiAjCi1DUFBGTEFHUyAgID0gLUkkKEJGRF9ST09UX0RJUikvaW5jbHVkZQotQ0ZMQUdTICAgICA9ICQoSE9TVENGTEFHUykgLU8gJChDUFBGTEFHUykKLUNDCSAgID0gJChIT1NUQ0MpCi1NQUtFREVQRU5EID0gbWFrZWRlcGVuZAorSE9TVENQUEZMQUdTID0gLUkkKEJGRF9ST09UX0RJUikvaW5jbHVkZQogCiBIT1NUT1MgOj0gJChzaGVsbCB1bmFtZSAtcyB8IHNlZCAtZSAncy9cKFtDY11bWXldW0dnXVtXd11bSWldW05uXVwpLiovY3lnd2luLycpCiAKQEAgLTU0LDEzICs1MSwxMyBAQAogYWxsOgkkKG9iaikuZGVwZW5kICQoQklOUykKIAogJChvYmopZ2Ric2VuZDoJJChvYmopZ2Ric2VuZC5vICQob2JqKWVycm9yLm8gJChvYmopcmVtb3RlLm8gJChvYmopc2VyaWFsLm8KLQkJJChDQykgJChDRkxBR1MpICQoSE9TVF9MREZMQUdTKSAtbyAkQCAkXgorCQkkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RMREZMQUdTKSAtbyAkQCAkXgogCiAkKG9iailnZGJjb250OgkkKG9iailnZGJjb250Lm8gJChvYmopZXJyb3IubyAkKG9iailyZW1vdGUubyAkKG9iailzZXJpYWwubwotCQkkKENDKSAkKENGTEFHUykgJChIT1NUX0xERkxBR1MpIC1vICRAICReCisJCSQoSE9TVENDKSAkKEhPU1RDRkxBR1MpICQoSE9TVExERkxBR1MpIC1vICRAICReCiAKIGNsZWFuOgotCXJtIC1mICQoT0JKUykKKwlybSAtZiAkKEhPU1RPQkpTKQogCiBkaXN0Y2xlYW46CWNsZWFuCiAJcm0gLWYgJChCSU5TKSAkKG9iailjb3JlICQob2JqKSouYmFrICQob2JqKS5kZXBlbmQKZGlmZiAtLWdpdCBhL3Rvb2xzL2ltbHMvTWFrZWZpbGUgYi90b29scy9pbWxzL01ha2VmaWxlCmluZGV4IDU5YjkyOGMuLjliMmFmYjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ltbHMvTWFrZWZpbGUKKysrIGIvdG9vbHMvaW1scy9NYWtlZmlsZQpAQCAtMTksOCArMTksNiBAQAogCiBpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKIAotSE9TVENGTEFHUyA9IC1XYWxsIC1wZWRhbnRpYwotCiAjIEdlbmVyYXRlZCBleGVjdXRhYmxlIGZpbGVzCiBCSU5fRklMRVMteSArPSBpbWxzCiAKQEAgLTQ4LDUwICs0Niw0MyBAQAogTElCRkRUX09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoTElCRkRUX09CSl9GSUxFUy15KSkKIAogIwotIyBVc2UgbmF0aXZlIHRvb2xzIGFuZCBvcHRpb25zCisjIENvbXBpbGUgZm9yIGEgaG9zdGVkIGVudmlyb25tZW50IG9uIHRoZSB0YXJnZXQKICMgRGVmaW5lIF9fS0VSTkVMX1NUUklDVF9OQU1FUyB0byBwcmV2ZW50IHR5cGVkZWYgb3ZlcmxhcHMKICMKLUNQUEZMQUdTICAgPSAtaWRpcmFmdGVyICQoU1JDVFJFRSkvaW5jbHVkZSBcCitIT1NUQ1BQRkxBR1MgID0gLWlkaXJhZnRlciAkKFNSQ1RSRUUpL2luY2x1ZGUgXAogCQktaWRpcmFmdGVyICQoT0JKVFJFRSkvaW5jbHVkZTIgXAogCQktaWRpcmFmdGVyICQoT0JKVFJFRSkvaW5jbHVkZSBcCiAJICAgICAgICAtSSAkKFNSQ1RSRUUpL2xpYmZkdCBcCiAJCS1JICQoU1JDVFJFRSkvdG9vbHMgXAogCQktRFVTRV9IT1NUQ0MgLURfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLUNGTEFHUyAgICAgPSAkKEhPU1RDRkxBR1MpICQoQ1BQRkxBR1MpIC1PCi0KLSMgTm8gLXBlZGFudGljIHN3aXRjaCB0byBhdm9pZCBsaWJmZHQgY29tcGlsYXRpb24gd2FybmluZ3MKLUZJVF9DRkxBR1MgPSAtV2FsbCAkKENQUEZMQUdTKSAtTwotCi1DQwkgICA9ICQoQ1JPU1NfQ09NUElMRVIpZ2NjCi1TVFJJUAkgICA9ICQoQ1JPU1NfQ09NUElMRVIpc3RyaXAKIAogaWZlcSAoJChNVERfVkVSU0lPTiksb2xkKQotQ1BQRkxBR1MgKz0gLURNVERfT0xECitIT1NUQ1BQRkxBR1MgKz0gLURNVERfT0xECiBlbmRpZgogCiBhbGw6CSQoQklOUykKIAogJChvYmopaW1sczoJJChvYmopaW1scy5vICQob2JqKWNyYzMyLm8gJChvYmopaW1hZ2UubyAkKG9iailtZDUubyBcCiAJCSQob2JqKXNoYTEubyAkKExJQkZEVF9PQkpTKQotCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkXgorCSQoQ0MpICQoSE9TVENGTEFHUykgJChIT1NUTERGTEFHUykgLW8gJEAgJF4KIAkkKFNUUklQKSAkQAogCiAjIFNvbWUgZmlsZXMgY29tcGxhaW4gaWYgY29tcGlsZWQgd2l0aCAtcGVkYW50aWMsIHVzZSBGSVRfQ0ZMQUdTCiAkKG9iailpbWFnZS5vOiAkKFNSQ1RSRUUpL2NvbW1vbi9pbWFnZS5jCi0JJChDQykgLWcgJChGSVRfQ0ZMQUdTKSAtYyAtbyAkQCAkPAorCSQoQ0MpIC1nICQoSE9TVENGTEFHU19OT1BFRCkgLWMgLW8gJEAgJDwKIAotJChvYmopaW1scy5vOiBpbWxzLmMKLQkkKENDKSAtZyAkKEZJVF9DRkxBR1MpIC1jIC1vICRAICQ8CiskKG9iailpbWxzLm86ICQoU1JDVFJFRSkvdG9vbHMvaW1scy9pbWxzLmMKKwkkKENDKSAtZyAkKEhPU1RDRkxBR1NfTk9QRUQpIC1jIC1vICRAICQ8CiAKICMgU29tZSBvZiB0aGUgdG9vbCBvYmplY3RzIG5lZWQgdG8gYmUgYWNjZXNzZWQgZnJvbSBvdXRzaWRlIHRoZSB0b29scy9pbWxzIGRpcmVjdG9yeQogJChvYmopJS5vOiAkKFNSQ1RSRUUpL2NvbW1vbi8lLmMKLQkkKENDKSAtZyAkKEZJVF9DRkxBR1MpIC1jIC1vICRAICQ8CisJJChDQykgLWcgJChIT1NUQ0ZMQUdTX05PUEVEKSAtYyAtbyAkQCAkPAogCiAkKG9iaiklLm86ICQoU1JDVFJFRSkvbGliX2dlbmVyaWMvJS5jCi0JJChDQykgLWcgJChDRkxBR1MpIC1jIC1vICRAICQ8CisJJChDQykgLWcgJChIT1NUQ0ZMQUdTKSAtYyAtbyAkQCAkPAogCiAkKG9iaiklLm86ICQoU1JDVFJFRSkvbGliZmR0LyUuYwotCSQoQ0MpIC1nICQoRklUX0NGTEFHUykgLWMgLW8gJEAgJDwKKwkkKENDKSAtZyAkKEhPU1RDRkxBR1NfTk9QRUQpIC1jIC1vICRAICQ8CiAKIGNsZWFuOgogCXJtIC1yZiAqLm8gaW1scwo=