ZGlmZiAtLWdpdCBhLy5jb25maWctZGV2aWNlIGIvLmNvbmZpZy1kZXZpY2UKaW5kZXggZjUyYzdhYy4uNTdmZTIwYyAxMDA2NDQKLS0tIGEvLmNvbmZpZy1kZXZpY2UKKysrIGIvLmNvbmZpZy1kZXZpY2UKQEAgLTQ0LDYgKzQ0LDcgQEAKICMgQ09ORklHX0FSUElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUlAgaXMgbm90IHNldAogIyBDT05GSUdfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfQkFTRTMyIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFNjQ9eQogQ09ORklHX0JBU0VOQU1FPXkKICMgQ09ORklHX0JDIGlzIG5vdCBzZXQKQEAgLTI0Nyw2ICsyNDgsNyBAQAogQ09ORklHX1BTPXkKIENPTkZJR19QV0RYPXkKIENPTkZJR19QV0Q9eQorIyBDT05GSUdfUFdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfUkVBREFIRUFEIGlzIG5vdCBzZXQKIENPTkZJR19SRUFERUxGPXkKIENPTkZJR19SRUFETElOSz15CkBAIC0zMjQsNiArMzI2LDcgQEAKIENPTkZJR19VTElNSVQ9eQogQ09ORklHX1VNT1VOVD15CiBDT05GSUdfVU5BTUU9eQorIyBDT05GSUdfVU5JQ09ERSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JUT15CiBDT05GSUdfVU5JWDJET1M9eQogQ09ORklHX1VOTElOSz15CmRpZmYgLS1naXQgYS8uY29uZmlnLWxpbnV4IGIvLmNvbmZpZy1saW51eAppbmRleCA4MmI4MGE4Li5mOGVjNDExIDEwMDY0NAotLS0gYS8uY29uZmlnLWxpbnV4CisrKyBiLy5jb25maWctbGludXgKQEAgLTQ1LDYgKzQ1LDcgQEAKICMgQ09ORklHX0FSUElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUlAgaXMgbm90IHNldAogIyBDT05GSUdfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfQkFTRTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRU5BTUU9eQogIyBDT05GSUdfQkMgaXMgbm90IHNldApAQCAtMjQxLDYgKzI0Miw3IEBACiBDT05GSUdfUFM9eQogIyBDT05GSUdfUFdEWCBpcyBub3Qgc2V0CiBDT05GSUdfUFdEPXkKKyMgQ09ORklHX1BXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQURBSEVBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFERUxGIGlzIG5vdCBzZXQKIENPTkZJR19SRUFETElOSz15CkBAIC0zMTMsNiArMzE1LDcgQEAKICMgQ09ORklHX1VMSU1JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VTU9VTlQgaXMgbm90IHNldAogQ09ORklHX1VOQU1FPXkKKyMgQ09ORklHX1VOSUNPREUgaXMgbm90IHNldAogQ09ORklHX1VOSVE9eQogQ09ORklHX1VOSVgyRE9TPXkKICMgQ09ORklHX1VOTElOSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS8uY29uZmlnLW1hYyBiLy5jb25maWctbWFjCmluZGV4IGVlNGQzZWYuLmE0MTkzNTMgMTAwNjQ0Ci0tLSBhLy5jb25maWctbWFjCisrKyBiLy5jb25maWctbWFjCkBAIC00NSw2ICs0NSw3IEBACiAjIENPTkZJR19BUlBJTkcgaXMgbm90IHNldAogIyBDT05GSUdfQVJQIGlzIG5vdCBzZXQKICMgQ09ORklHX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBU0UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFNjQgaXMgbm90IHNldAogQ09ORklHX0JBU0VOQU1FPXkKICMgQ09ORklHX0JDIGlzIG5vdCBzZXQKQEAgLTI0MSw2ICsyNDIsNyBAQAogIyBDT05GSUdfUFMgaXMgbm90IHNldAogIyBDT05GSUdfUFdEWCBpcyBub3Qgc2V0CiBDT05GSUdfUFdEPXkKKyMgQ09ORklHX1BXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQURBSEVBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUFERUxGIGlzIG5vdCBzZXQKIENPTkZJR19SRUFETElOSz15CkBAIC0zMTMsNiArMzE1LDcgQEAKICMgQ09ORklHX1VMSU1JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VTU9VTlQgaXMgbm90IHNldAogQ09ORklHX1VOQU1FPXkKKyMgQ09ORklHX1VOSUNPREUgaXMgbm90IHNldAogQ09ORklHX1VOSVE9eQogQ09ORklHX1VOSVgyRE9TPXkKICMgQ09ORklHX1VOTElOSyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS8uZ2l0aHViL3dvcmtmbG93cy90b3lib3gueW1sIGIvLmdpdGh1Yi93b3JrZmxvd3MvdG95Ym94LnltbAppbmRleCBiM2IxNjY3Li4xYjQ2M2IyIDEwMDY0NAotLS0gYS8uZ2l0aHViL3dvcmtmbG93cy90b3lib3gueW1sCisrKyBiLy5naXRodWIvd29ya2Zsb3dzL3RveWJveC55bWwKQEAgLTcsNiArNywyMCBAQAogICAgIGJyYW5jaGVzOiBbIG1hc3RlciBdCiAKIGpvYnM6CisgIE1hY09TLTExXzA6CisgICAgcnVucy1vbjogbWFjb3MtMTEuMAorCisgICAgc3RlcHM6CisgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHYyCisgICAgLSBuYW1lOiBTZXR1cAorICAgICAgcnVuOiBicmV3IGluc3RhbGwgZ251LXNlZAorICAgIC0gbmFtZTogQ29uZmlndXJlCisgICAgICBydW46IG1ha2UgbWFjb3NfZGVmY29uZmlnCisgICAgLSBuYW1lOiBCdWlsZAorICAgICAgcnVuOiBtYWtlCisgICAgLSBuYW1lOiBUZXN0CisgICAgICBydW46IFZFUkJPU0U9MSBtYWtlIHRlc3RzCisKICAgTWFjT1MtMTBfMTU6CiAgICAgcnVucy1vbjogbWFjb3MtMTAuMTUKIApkaWZmIC0tZ2l0IGEvQ29uZmlnLmluIGIvQ29uZmlnLmluCmluZGV4IGY3NDA3ZDguLjI3OTQ4YWQgMTAwNjQ0Ci0tLSBhL0NvbmZpZy5pbgorKysgYi9Db25maWcuaW4KQEAgLTEwNiwxMiArMTA2LDYgQEAKIAkgIG9wdHN0cmluZy4gKFVzZSBUT1lGTEFHX05PSEVMUCB0byBkaXNhYmxlLikgUHJvZHVjZXMgdGhlIHNhbWUgb3V0cHV0CiAJICBhcyAiaGVscCBjb21tYW5kIi4gLS12ZXJzaW9uIHNob3dzIHRveWJveCB2ZXJzaW9uLgogCi1jb25maWcgVE9ZQk9YX0kxOE4KLQlib29sICJJbnRlcm5hdGlvbmFsaXphdGlvbiBzdXBwb3J0IgotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFVURi04IGNoYXJhY3RlciBzZXRzLCBhbmQgc29tZSBsb2NhbGUgc3VwcG9ydC4KLQogY29uZmlnIFRPWUJPWF9GUkVFCiAJYm9vbCAiRnJlZSBtZW1vcnkgdW5uZWNlc3NhcmlseSIKIAlkZWZhdWx0IG4KZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMjFkMzM1OS4uNTI2MDJkMiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTYzLDYgKzYzLDcgQEAKIAlAZWNobyByb290IGNsZWFuZWQKIAogY2xlYW46OgorCUBjaG1vZCAtZlIgNzAwIGdlbmVyYXRlZCB8fCB0cnVlCiAJQHJtIC1yZiB0b3lib3ggZ2VuZXJhdGVkIGNoYW5nZSAuc2luZ2xlY29uZmlnKgogCUBlY2hvIGNsZWFuZWQKIApkaWZmIC0tZ2l0IGEvYW5kcm9pZC9kZXZpY2UvZ2VuZXJhdGVkL2NvbmZpZy5oIGIvYW5kcm9pZC9kZXZpY2UvZ2VuZXJhdGVkL2NvbmZpZy5oCmluZGV4IGU0YmU4M2YuLjhhYWNjMTUgMTAwNjQ0Ci0tLSBhL2FuZHJvaWQvZGV2aWNlL2dlbmVyYXRlZC9jb25maWcuaAorKysgYi9hbmRyb2lkL2RldmljZS9nZW5lcmF0ZWQvY29uZmlnLmgKQEAgLTYyLDYgKzYyLDggQEAKICNkZWZpbmUgVVNFX0FSUCguLi4pCiAjZGVmaW5lIENGR19BU0NJSSAwCiAjZGVmaW5lIFVTRV9BU0NJSSguLi4pCisjZGVmaW5lIENGR19CQVNFMzIgMAorI2RlZmluZSBVU0VfQkFTRTMyKC4uLikKICNkZWZpbmUgQ0ZHX0JBU0U2NCAxCiAjZGVmaW5lIFVTRV9CQVNFNjQoLi4uKSBfX1ZBX0FSR1NfXwogI2RlZmluZSBDRkdfQkFTRU5BTUUgMQpAQCAtNDY4LDYgKzQ3MCw4IEBACiAjZGVmaW5lIFVTRV9QV0RYKC4uLikgX19WQV9BUkdTX18KICNkZWZpbmUgQ0ZHX1BXRCAxCiAjZGVmaW5lIFVTRV9QV0QoLi4uKSBfX1ZBX0FSR1NfXworI2RlZmluZSBDRkdfUFdHRU4gMAorI2RlZmluZSBVU0VfUFdHRU4oLi4uKQogI2RlZmluZSBDRkdfUkVBREFIRUFEIDAKICNkZWZpbmUgVVNFX1JFQURBSEVBRCguLi4pCiAjZGVmaW5lIENGR19SRUFERUxGIDEKQEAgLTYyMiw2ICs2MjYsOCBAQAogI2RlZmluZSBVU0VfVU1PVU5UKC4uLikgX19WQV9BUkdTX18KICNkZWZpbmUgQ0ZHX1VOQU1FIDEKICNkZWZpbmUgVVNFX1VOQU1FKC4uLikgX19WQV9BUkdTX18KKyNkZWZpbmUgQ0ZHX1VOSUNPREUgMAorI2RlZmluZSBVU0VfVU5JQ09ERSguLi4pCiAjZGVmaW5lIENGR19VTklRIDEKICNkZWZpbmUgVVNFX1VOSVEoLi4uKSBfX1ZBX0FSR1NfXwogI2RlZmluZSBDRkdfVU5JWDJET1MgMQpkaWZmIC0tZ2l0IGEvYW5kcm9pZC9kZXZpY2UvZ2VuZXJhdGVkL2ZsYWdzLmggYi9hbmRyb2lkL2RldmljZS9nZW5lcmF0ZWQvZmxhZ3MuaAppbmRleCAwYWM2M2U3Li5lZDhhYTJlIDEwMDY0NAotLS0gYS9hbmRyb2lkL2RldmljZS9nZW5lcmF0ZWQvZmxhZ3MuaAorKysgYi9hbmRyb2lkL2RldmljZS9nZW5lcmF0ZWQvZmxhZ3MuaApAQCAtNzMsNiArNzMsMTcgQEAKICN1bmRlZiBGT1JfYXNjaWkKICNlbmRpZgogCisvLyBiYXNlMzIgICBkaXcjPDA9NzZbIWR3XQorI3VuZGVmIE9QVFNUUl9iYXNlMzIKKyNkZWZpbmUgT1BUU1RSX2Jhc2UzMiAiZGl3IzwwPTc2WyFkd10iCisjaWZkZWYgQ0xFQU5VUF9iYXNlMzIKKyN1bmRlZiBDTEVBTlVQX2Jhc2UzMgorI3VuZGVmIEZPUl9iYXNlMzIKKyN1bmRlZiBGTEFHX3cKKyN1bmRlZiBGTEFHX2kKKyN1bmRlZiBGTEFHX2QKKyNlbmRpZgorCiAvLyBiYXNlNjQgZGl3IzwwPTc2WyFkd10gZGl3IzwwPTc2WyFkd10KICN1bmRlZiBPUFRTVFJfYmFzZTY0CiAjZGVmaW5lIE9QVFNUUl9iYXNlNjQgImRpdyM8MD03NlshZHddIgpAQCAtMjM0NCw2ICsyMzU1LDI2IEBACiAjdW5kZWYgRkxBR19hCiAjZW5kaWYKIAorLy8gcHdnZW4gICA+MnIocmVtb3ZlKTpjKGNhcGl0YWxpemUpbihudW1lcmFscyl5KHN5bWJvbHMpcyhzZWN1cmUpQihhbWJpZ3VvdXMpaChoZWxwKUMxdkEobm8tY2FwaXRhbGl6ZSkwKG5vLW51bWVyYWxzKVstY0FdWy1uMF1bLUMxXQorI3VuZGVmIE9QVFNUUl9wd2dlbgorI2RlZmluZSBPUFRTVFJfcHdnZW4gIj4ycihyZW1vdmUpOmMoY2FwaXRhbGl6ZSluKG51bWVyYWxzKXkoc3ltYm9scylzKHNlY3VyZSlCKGFtYmlndW91cyloKGhlbHApQzF2QShuby1jYXBpdGFsaXplKTAobm8tbnVtZXJhbHMpWy1jQV1bLW4wXVstQzFdIgorI2lmZGVmIENMRUFOVVBfcHdnZW4KKyN1bmRlZiBDTEVBTlVQX3B3Z2VuCisjdW5kZWYgRk9SX3B3Z2VuCisjdW5kZWYgRkxBR18wCisjdW5kZWYgRkxBR19BCisjdW5kZWYgRkxBR192CisjdW5kZWYgRkxBR18xCisjdW5kZWYgRkxBR19DCisjdW5kZWYgRkxBR19oCisjdW5kZWYgRkxBR19CCisjdW5kZWYgRkxBR19zCisjdW5kZWYgRkxBR195CisjdW5kZWYgRkxBR19uCisjdW5kZWYgRkxBR19jCisjdW5kZWYgRkxBR19yCisjZW5kaWYKKwogLy8gcmVhZGFoZWFkICAgIAogI3VuZGVmIE9QVFNUUl9yZWFkYWhlYWQKICNkZWZpbmUgT1BUU1RSX3JlYWRhaGVhZCAwCkBAIC0yNTYwLDYgKzI1OTEsMTQgQEAKICN1bmRlZiBGTEFHX2YKICNlbmRpZgogCisvLyBzZXQgICAgCisjdW5kZWYgT1BUU1RSX3NldAorI2RlZmluZSBPUFRTVFJfc2V0IDAKKyNpZmRlZiBDTEVBTlVQX3NldAorI3VuZGVmIENMRUFOVVBfc2V0CisjdW5kZWYgRk9SX3NldAorI2VuZGlmCisKIC8vIHNldGVuZm9yY2UgPDE+MSA8MT4xCiAjdW5kZWYgT1BUU1RSX3NldGVuZm9yY2UKICNkZWZpbmUgT1BUU1RSX3NldGVuZm9yY2UgIjwxPjEiCkBAIC0zMjQ2LDYgKzMyODUsMTQgQEAKICN1bmRlZiBGTEFHX28KICNlbmRpZgogCisvLyB1bmljb2RlICAgPDEKKyN1bmRlZiBPUFRTVFJfdW5pY29kZQorI2RlZmluZSBPUFRTVFJfdW5pY29kZSAiPDEiCisjaWZkZWYgQ0xFQU5VUF91bmljb2RlCisjdW5kZWYgQ0xFQU5VUF91bmljb2RlCisjdW5kZWYgRk9SX3VuaWNvZGUKKyNlbmRpZgorCiAvLyB1bmlxIGYjcyN3I3ppY2R1IGYjcyN3I3ppY2R1CiAjdW5kZWYgT1BUU1RSX3VuaXEKICNkZWZpbmUgT1BUU1RSX3VuaXEgImYjcyN3I3ppY2R1IgpAQCAtMzU5OCw2ICszNjQ1LDE1IEBACiAjZW5kaWYKICNlbmRpZgogCisjaWZkZWYgRk9SX2Jhc2UzMgorI2lmbmRlZiBUVAorI2RlZmluZSBUVCB0aGlzLmJhc2UzMgorI2VuZGlmCisjZGVmaW5lIEZMQUdfdyAoRk9SQ0VEX0ZMQUc8PDApCisjZGVmaW5lIEZMQUdfaSAoRk9SQ0VEX0ZMQUc8PDEpCisjZGVmaW5lIEZMQUdfZCAoRk9SQ0VEX0ZMQUc8PDIpCisjZW5kaWYKKwogI2lmZGVmIEZPUl9iYXNlNjQKICNpZm5kZWYgVFQKICNkZWZpbmUgVFQgdGhpcy5iYXNlNjQKQEAgLTU1MTMsNiArNTU2OSwyNCBAQAogI2RlZmluZSBGTEFHX2EgKDE8PDApCiAjZW5kaWYKIAorI2lmZGVmIEZPUl9wd2dlbgorI2lmbmRlZiBUVAorI2RlZmluZSBUVCB0aGlzLnB3Z2VuCisjZW5kaWYKKyNkZWZpbmUgRkxBR18wIChGT1JDRURfRkxBRzw8MCkKKyNkZWZpbmUgRkxBR19BIChGT1JDRURfRkxBRzw8MSkKKyNkZWZpbmUgRkxBR192IChGT1JDRURfRkxBRzw8MikKKyNkZWZpbmUgRkxBR18xIChGT1JDRURfRkxBRzw8MykKKyNkZWZpbmUgRkxBR19DIChGT1JDRURfRkxBRzw8NCkKKyNkZWZpbmUgRkxBR19oIChGT1JDRURfRkxBRzw8NSkKKyNkZWZpbmUgRkxBR19CIChGT1JDRURfRkxBRzw8NikKKyNkZWZpbmUgRkxBR19zIChGT1JDRURfRkxBRzw8NykKKyNkZWZpbmUgRkxBR195IChGT1JDRURfRkxBRzw8OCkKKyNkZWZpbmUgRkxBR19uIChGT1JDRURfRkxBRzw8OSkKKyNkZWZpbmUgRkxBR19jIChGT1JDRURfRkxBRzw8MTApCisjZGVmaW5lIEZMQUdfciAoRk9SQ0VEX0ZMQUc8PDExKQorI2VuZGlmCisKICNpZmRlZiBGT1JfcmVhZGFoZWFkCiAjaWZuZGVmIFRUCiAjZGVmaW5lIFRUIHRoaXMucmVhZGFoZWFkCkBAIC01NjkxLDYgKzU3NjUsMTIgQEAKICNkZWZpbmUgRkxBR19mICgxPDwyKQogI2VuZGlmCiAKKyNpZmRlZiBGT1Jfc2V0CisjaWZuZGVmIFRUCisjZGVmaW5lIFRUIHRoaXMuc2V0CisjZW5kaWYKKyNlbmRpZgorCiAjaWZkZWYgRk9SX3NldGVuZm9yY2UKICNpZm5kZWYgVFQKICNkZWZpbmUgVFQgdGhpcy5zZXRlbmZvcmNlCkBAIC02Mjc1LDYgKzYzNTUsMTIgQEAKICNkZWZpbmUgRkxBR19vICgxPDw2KQogI2VuZGlmCiAKKyNpZmRlZiBGT1JfdW5pY29kZQorI2lmbmRlZiBUVAorI2RlZmluZSBUVCB0aGlzLnVuaWNvZGUKKyNlbmRpZgorI2VuZGlmCisKICNpZmRlZiBGT1JfdW5pcQogI2lmbmRlZiBUVAogI2RlZmluZSBUVCB0aGlzLnVuaXEKZGlmZiAtLWdpdCBhL2FuZHJvaWQvZGV2aWNlL2dlbmVyYXRlZC9nbG9iYWxzLmggYi9hbmRyb2lkL2RldmljZS9nZW5lcmF0ZWQvZ2xvYmFscy5oCmluZGV4IDkwMDVjZWEuLjg3NmU0NjggMTAwNjQ0Ci0tLSBhL2FuZHJvaWQvZGV2aWNlL2dlbmVyYXRlZC9nbG9iYWxzLmgKKysrIGIvYW5kcm9pZC9kZXZpY2UvZ2VuZXJhdGVkL2dsb2JhbHMuaApAQCAtMTI0LDcgKzEyNCw3IEBACiBzdHJ1Y3Qgc2VxX2RhdGEgewogICBjaGFyICpzLCAqZjsKIAotICBpbnQgcHJlY2lzaW9uOworICBpbnQgcHJlY2lzaW9uLCBidWZsZW47CiB9OwogCiAvLyB0b3lzL2xzYi9zdS5jCkBAIC0xNjEsOCArMTYxLDggQEAKIHN0cnVjdCBtaWNyb2NvbV9kYXRhIHsKICAgbG9uZyBzOwogCi0gIGludCBmZDsKLSAgc3RydWN0IHRlcm1pb3Mgb3JpZ2luYWxfc3RkaW5fc3RhdGUsIG9yaWdpbmFsX2ZkX3N0YXRlOworICBpbnQgZmQsIHN0b2s7CisgIHN0cnVjdCB0ZXJtaW9zIG9sZF9zdGRpbiwgb2xkX2ZkOwogfTsKIAogLy8gdG95cy9uZXQvbmV0Y2F0LmMKQEAgLTIxNCw4ICsyMTQsOSBAQAogCiBzdHJ1Y3QgYmFzZTY0X2RhdGEgewogICBsb25nIHc7Ci0KICAgdW5zaWduZWQgdG90YWw7CisgIHVuc2lnbmVkIG47ICAvLyBudW1iZXIgb2YgYml0cyB1c2VkIGluIGVuY29kaW5nLiA1IGZvciBiYXNlMzIsIDYgZm9yIGJhc2U2NAorICB1bnNpZ25lZCBhbGlnbjsgIC8vIG51bWJlciBvZiBiaXRzIHRvIGFsaWduIHRvCiB9OwogCiAvLyB0b3lzL290aGVyL2Jsa2Rpc2NhcmQuYwpAQCAtMzc5LDYgKzM4MCwxMiBAQAogICBjaGFyICpjOwogfTsKIAorLy8gdG95cy9vdGhlci9wd2dlbi5jCisKK3N0cnVjdCBwd2dlbl9kYXRhIHsKKyAgY2hhciAqcjsKK307CisKIC8vIHRveXMvb3RoZXIvcnRjd2FrZS5jCiAKIHN0cnVjdCBydGN3YWtlX2RhdGEgewpAQCAtODQxLDExICs4NDgsMTAgQEAKICAgICB9IGV4ZWM7CiAgIH07CiAKLSAgLy8ga2VlcCBsaW5lbm8gaGVyZTogdXNlZCB0byB3b3JrIGFyb3VuZCBjb21waWxlciBsaW1pdGF0aW9uIGluIHJ1bl9jb21tYW5kKCkKLSAgbG9uZyBsaW5lbm87CisgIC8vIGtlZXAgaWZzIGhlcmU6IHVzZWQgdG8gd29yayBhcm91bmQgY29tcGlsZXIgbGltaXRhdGlvbiBpbiBydW5fY29tbWFuZCgpCiAgIGNoYXIgKmlmcywgKmlzZXhlYywgKndjcGF0OwotICB1bnNpZ25lZCBvcHRpb25zLCBqb2JjbnQ7Ci0gIGludCBoZmQsIHBpZCwgYmFuZ3BpZCwgdmFyc2xlbiwgc2hpZnQsIGNkY291bnQ7CisgIHVuc2lnbmVkIG9wdGlvbnMsIGpvYmNudCwgTElORU5POworICBpbnQgaGZkLCBwaWQsIGJhbmdwaWQsIHZhcnNsZW4sIGNkY291bnQ7CiAgIGxvbmcgbG9uZyBTRUNPTkRTOwogCiAgIC8vIGdsb2JhbCBhbmQgbG9jYWwgdmFyaWFibGVzCkBAIC04NTcsOCArODYzLDkgQEAKICAgLy8gUGFyc2VkIGZ1bmN0aW9ucwogICBzdHJ1Y3Qgc2hfZnVuY3Rpb24gewogICAgIGNoYXIgKm5hbWU7Ci0gICAgc3RydWN0IHNoX3BpcGVsaW5lIHsgIC8vIHBpcGVsaW5lIHNlZ21lbnRzCisgICAgc3RydWN0IHNoX3BpcGVsaW5lIHsgIC8vIHBpcGVsaW5lIHNlZ21lbnRzOiBsaW5rZWQgbGlzdCBvZiBhcmcgdy9tZXRhZGF0YQogICAgICAgc3RydWN0IHNoX3BpcGVsaW5lICpuZXh0LCAqcHJldiwgKmVuZDsKKyAgICAgIHVuc2lnbmVkIGxpbmVubzsKICAgICAgIGludCBjb3VudCwgaGVyZSwgdHlwZTsgLy8gVE9ETyBhYnVzZSB0eXBlIHRvIHJlcGxhY2UgY291bnQgZHVyaW5nIHBhcnNpbmcKICAgICAgIHN0cnVjdCBzaF9hcmcgewogICAgICAgICBjaGFyICoqdjsKQEAgLTg3OCw4ICs4ODUsMTcgQEAKICAgICBzdHJ1Y3Qgc2hfYXJnICpyYXcsIGFyZzsKICAgfSAqcHA7IC8vIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MKIAorICBzdHJ1Y3Qgc2hfY2FsbHN0YWNrIHsKKyAgICBzdHJ1Y3Qgc2hfY2FsbHN0YWNrICpuZXh0OworICAgIHN0cnVjdCBzaF9mdW5jdGlvbiBzY3JhdGNoOworICAgIHN0cnVjdCBzaF9hcmcgYXJnOworICAgIHN0cnVjdCBhcmdfbGlzdCAqZGVsZXRlOworICAgIHVuc2lnbmVkIGxpbmVubzsKKyAgICBsb25nIHNoaWZ0OworICB9ICpjYzsKKwogICAvLyBqb2IgbGlzdCwgY29tbWFuZCBsaW5lIGZvciAkKiwgc2NyYXRjaCBzcGFjZSBmb3IgZG9fd2lsZGNhcmRfZmlsZXMoKQotICBzdHJ1Y3Qgc2hfYXJnIGpvYnMsICphcmcsICp3Y2RlY2s7CisgIHN0cnVjdCBzaF9hcmcgam9icywgKndjZGVjazsKIH07CiAKIC8vIHRveXMvcGVuZGluZy9zdHR5LmMKQEAgLTE0OTIsNiArMTUwOCw3IEBACiAKIHN0cnVjdCB0ZWVfZGF0YSB7CiAgIHZvaWQgKm91dHB1dHM7CisgIGludCBvdXQ7CiB9OwogCiAvLyB0b3lzL3Bvc2l4L3RvdWNoLmMKQEAgLTE1ODcsNiArMTYwNCw3IEBACiAJc3RydWN0IG1vZGluZm9fZGF0YSBtb2RpbmZvOwogCXN0cnVjdCBuc2VudGVyX2RhdGEgbnNlbnRlcjsKIAlzdHJ1Y3Qgb25laXRfZGF0YSBvbmVpdDsKKwlzdHJ1Y3QgcHdnZW5fZGF0YSBwd2dlbjsKIAlzdHJ1Y3QgcnRjd2FrZV9kYXRhIHJ0Y3dha2U7CiAJc3RydWN0IHNldGZhdHRyX2RhdGEgc2V0ZmF0dHI7CiAJc3RydWN0IHNoYTNzdW1fZGF0YSBzaGEzc3VtOwpkaWZmIC0tZ2l0IGEvYW5kcm9pZC9kZXZpY2UvZ2VuZXJhdGVkL2hlbHAuaCBiL2FuZHJvaWQvZGV2aWNlL2dlbmVyYXRlZC9oZWxwLmgKaW5kZXggZDE4ZTY4YS4uNzU0ZTlhMSAxMDA2NDQKLS0tIGEvYW5kcm9pZC9kZXZpY2UvZ2VuZXJhdGVkL2hlbHAuaAorKysgYi9hbmRyb2lkL2RldmljZS9nZW5lcmF0ZWQvaGVscC5oCkBAIC0xMiw4ICsxMiw2IEBACiAKICNkZWZpbmUgSEVMUF90b3lib3hfZnJlZSAiV2hlbiBhIHByb2dyYW0gZXhpdHMsIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgY2xlYW4gdXAgYWZ0ZXIgaXRcbihmcmVlIG1lbW9yeSwgY2xvc2UgZmlsZXMsIGV0YykuIFRvIHNhdmUgc2l6ZSwgdG95Ym94IHVzdWFsbHkgcmVsaWVzXG5vbiB0aGlzIGJlaGF2aW9yLiBJZiB5b3UncmUgcnVubmluZyB0b3lib3ggdW5kZXIgYSBkZWJ1Z2dlciBvclxud2l0aG91dCBhIHJlYWwgT1MgKGFsYSBuZXdsaWIrbGliZ2xvc3MpLCBlbmFibGUgdGhpcyB0byBtYWtlIHRveWJveFxuY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmLiIKIAotI2RlZmluZSBIRUxQX3RveWJveF9pMThuICJTdXBwb3J0IGZvciBVVEYtOCBjaGFyYWN0ZXIgc2V0cywgYW5kIHNvbWUgbG9jYWxlIHN1cHBvcnQuIgotCiAjZGVmaW5lIEhFTFBfdG95Ym94X2hlbHBfZGFzaGRhc2ggIlN1cHBvcnQgLS1oZWxwIGFyZ3VtZW50IGluIGFsbCBjb21tYW5kcywgZXZlbiBvbmVzIHdpdGggYSBOVUxMXG5vcHRzdHJpbmcuIChVc2UgVE9ZRkxBR19OT0hFTFAgdG8gZGlzYWJsZS4pIFByb2R1Y2VzIHRoZSBzYW1lIG91dHB1dFxuYXMgXCJoZWxwIGNvbW1hbmRcIi4gLS12ZXJzaW9uIHNob3dzIHRveWJveCB2ZXJzaW9uLiIKIAogI2RlZmluZSBIRUxQX3RveWJveF9oZWxwICJJbmNsdWRlIGhlbHAgdGV4dCBmb3IgZWFjaCBjb21tYW5kLiIKQEAgLTIwMCw2ICsxOTgsOCBAQAogCiAjZGVmaW5lIEhFTFBfcmVhZGFoZWFkICJ1c2FnZTogcmVhZGFoZWFkIEZJTEUuLi5cblxuUHJlbG9hZCBmaWxlcyBpbnRvIGRpc2sgY2FjaGUuIgogCisjZGVmaW5lIEhFTFBfcHdnZW4gInVzYWdlOiBwd2dlbiBbLWNBbjB5cnNCaEMxdl0gW0xFTkdUSF0gW0NPVU5UXVxuXG5HZW5lcmF0ZSBodW1hbi1yZWFkYWJsZSByYW5kb20gcGFzc3dvcmRzLiBXaGVuIG91dHB1dCBpcyB0byB0dHkgcHJvZHVjZXNcbmEgc2NyZWVuZnVsbCB0byBkZWZlYXQgc2hvdWxkZXIgc3VyZmluZyAocGljayBvbmUgYW5kIGNsZWFyIHRoZSBzY3JlZW4pLlxuXG4tYyAgLS1jYXBpdGFsaXplICAgICAgICAgICAgICAgICAgUGVybWl0IGNhcGl0YWwgbGV0dGVycy5cbi1BICAtLW5vLWNhcGl0YWxpemUgICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIGNhcGl0YWwgbGV0dGVycy5cbi1uICAtLW51bWVyYWxzICAgICAgICAgICAgICAgICAgICBQZXJtaXQgbnVtYmVycy5cbi0wICAtLW5vLW51bWVyYWxzICAgICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIG51bWJlcnMuXG4teSAgLS1zeW1ib2xzICAgICAgICAgICAgICAgICAgICAgUGVybWl0IHNwZWNpYWwgY2hhcmFjdGVycyAoJCMlLi4uKS5cbi1yIDxjaGFycz4gIC0tcmVtb3ZlPTxjaGFycz4gICAgICBEb24ndCBpbmNsdWRlIHRoZSBnaXZlbiBjaGFyYWN0ZXJzLlxuLXMgIC0tc2VjdXJlICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlIG1vcmUgcmFuZG9tIHBhc3N3b3Jkcy5cbi1CICAtLWFtYmlndW91cyAgICAgICAgICAgICAgICAgICBBdm9pZCBhbWJpZ3VvdXMgY2hhcmFjdGVycyAoZS5nLiAwLCBPKS5cbi1oICAtLWhlbHAgICAgICAgICAgICAgICAgICAgICAgICBQcmludCB0aGlzIGhlbHAgbWVzc2FnZS5cbi1DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmludCB0aGUgb3V0cHV0IGluIGNvbHVtbnMuXG4tMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnQgdGhlIG91dHB1dCBvbmUgbGluZSBlYWNoLlxuLXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbid0IGluY2x1ZGUgdm93ZWxzLiIKKwogI2RlZmluZSBIRUxQX3B3ZHggInVzYWdlOiBwd2R4IFBJRC4uLlxuXG5QcmludCB3b3JraW5nIGRpcmVjdG9yeSBvZiBwcm9jZXNzZXMgbGlzdGVkIG9uIGNvbW1hbmQgbGluZS4iCiAKICNkZWZpbmUgSEVMUF9wcmludGVudiAidXNhZ2U6IHByaW50ZW52IFstMF0gW2Vudl92YXIuLi5dXG5cblByaW50IGVudmlyb25tZW50IHZhcmlhYmxlcy5cblxuLTAJVXNlIFxcMCBhcyBkZWxpbWl0ZXIgaW5zdGVhZCBvZiBcXG4iCkBAIC0zMTgsNiArMzE4LDggQEAKIAogI2RlZmluZSBIRUxQX2Jsa2Rpc2NhcmQgInVzYWdlOiBibGtkaXNjYXJkIFstb2xzemZdIERFVklDRVxuXG5EaXNjYXJkIGRldmljZSBzZWN0b3JzLlxuXG4tbywgLS1vZmZzZXQgT0ZGCUJ5dGUgb2Zmc2V0IHRvIHN0YXJ0IGRpc2NhcmRpbmcgYXQgKGRlZmF1bHQgMClcbi1sLCAtLWxlbmd0aCBMRU4JQnl0ZXMgdG8gZGlzY2FyZCAoZGVmYXVsdCBhbGwpXG4tcywgLS1zZWN1cmUJCVBlcmZvcm0gc2VjdXJlIGRpc2NhcmRcbi16LCAtLXplcm9vdXQJCVplcm8tZmlsbCByYXRoZXIgdGhhbiBkaXNjYXJkXG4tZiwgLS1mb3JjZQkJRGlzYWJsZSBjaGVjayBmb3IgbW91bnRlZCBmaWxlc3lzdGVtXG5cbk9GRiBhbmQgTEVOIG11c3QgYmUgYWxpZ25lZCB0byB0aGUgZGV2aWNlIHNlY3RvciBzaXplLlxuQnkgZGVmYXVsdCBlbnRpcmUgZGV2aWNlIGlzIGRpc2NhcmRlZC5cbldBUk5JTkc6IEFsbCBkaXNjYXJkZWQgZGF0YSBpcyBwZXJtYW5lbnRseSBsb3N0ISIKIAorI2RlZmluZSBIRUxQX2Jhc2UzMiAidXNhZ2U6IGJhc2UzMiBbLWRpXSBbLXcgQ09MVU1OU10gW0ZJTEUuLi5dXG5cbkVuY29kZSBvciBkZWNvZGUgaW4gYmFzZTMyLlxuXG4tZAlEZWNvZGVcbi1pCUlnbm9yZSBub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXJzXG4tdwlXcmFwIG91dHB1dCBhdCBDT0xVTU5TIChkZWZhdWx0IDc2IG9yIDAgZm9yIG5vIHdyYXApIgorCiAjZGVmaW5lIEhFTFBfYmFzZTY0ICJ1c2FnZTogYmFzZTY0IFstZGldIFstdyBDT0xVTU5TXSBbRklMRS4uLl1cblxuRW5jb2RlIG9yIGRlY29kZSBpbiBiYXNlNjQuXG5cbi1kCURlY29kZVxuLWkJSWdub3JlIG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnNcbi13CVdyYXAgb3V0cHV0IGF0IENPTFVNTlMgKGRlZmF1bHQgNzYgb3IgMCBmb3Igbm8gd3JhcCkiCiAKICNkZWZpbmUgSEVMUF9hc2NpaSAidXNhZ2U6IGFzY2lpXG5cbkRpc3BsYXkgYXNjaWkgY2hhcmFjdGVyIHNldC4iCkBAIC0zMzQsNiArMzM2LDggQEAKIAogI2RlZmluZSBIRUxQX3VzZXJhZGQgInVzYWdlOiB1c2VyYWRkIFstU0RIXSBbLWggRElSXSBbLXMgU0hFTExdIFstRyBHUlBdIFstZyBOQU1FXSBbLXUgVUlEXSBVU0VSIFtHUk9VUF1cblxuQ3JlYXRlIG5ldyB1c2VyLCBvciBhZGQgVVNFUiB0byBHUk9VUFxuXG4tRCAgICAgICBEb24ndCBhc3NpZ24gYSBwYXNzd29yZFxuLWcgTkFNRSAgUmVhbCBuYW1lXG4tRyBHUlAgICBBZGQgdXNlciB0byBleGlzdGluZyBncm91cFxuLWggRElSICAgSG9tZSBkaXJlY3Rvcnlcbi1IICAgICAgIERvbid0IGNyZWF0ZSBob21lIGRpcmVjdG9yeVxuLXMgU0hFTEwgTG9naW4gc2hlbGxcbi1TICAgICAgIENyZWF0ZSBhIHN5c3RlbSB1c2VyXG4tdSBVSUQgICBVc2VyIGlkIgogCisjZGVmaW5lIEhFTFBfdW5pY29kZSAidXNhZ2U6IHVuaWNvZGUgW1ttaW5dLW1heF1cblxuQ29udmVydCBiZXR3ZWVuIFVuaWNvZGUgY29kZSBwb2ludHMgYW5kIFVURi04LCBpbiBib3RoIGRpcmVjdGlvbnMuIgorCiAjZGVmaW5lIEhFTFBfdHJhY2Vyb3V0ZSAidXNhZ2U6IHRyYWNlcm91dGUgWy00NkZVSWxkbnZyXSBbLWYgMVNUX1RUTF0gWy1tIE1BWFRUTF0gWy1wIFBPUlRdIFstcSBQUk9CRVNdXG5bLXMgU1JDX0lQXSBbLXQgVE9TXSBbLXcgV0FJVF9TRUNdIFstZyBHQVRFV0FZXSBbLWkgSUZBQ0VdIFsteiBQQVVTRV9NU0VDXSBIT1NUIFtCWVRFU11cblxudHJhY2Vyb3V0ZTYgWy1kbnJ2XSBbLW0gTUFYVFRMXSBbLXAgUE9SVF0gWy1xIFBST0JFU11bLXMgU1JDX0lQXSBbLXQgVE9TXSBbLXcgV0FJVF9TRUNdXG4gIFstaSBJRkFDRV0gSE9TVCBbQllURVNdXG5cblRyYWNlIHRoZSByb3V0ZSB0byBIT1NUXG5cbi00LC02IEZvcmNlIElQIG9yIElQdjYgbmFtZSByZXNvbHV0aW9uXG4tRiAgICBTZXQgdGhlIGRvbid0IGZyYWdtZW50IGJpdCAoc3VwcG9ydHMgSVBWNCBvbmx5KVxuLVUgICAgVXNlIFVEUCBkYXRhZ3JhbXMgaW5zdGVhZCBvZiBJQ01QIEVDSE8gKHN1cHBvcnRzIElQVjQgb25seSlcbi1JICAgIFVzZSBJQ01QIEVDSE8gaW5zdGVhZCBvZiBVRFAgZGF0YWdyYW1zIChzdXBwb3J0cyBJUFY0IG9ubHkpXG4tbCAgICBEaXNwbGF5IHRoZSBUVEwgdmFsdWUgb2YgdGhlIHJldHVybmVkIHBhY2tldCAoc3VwcG9ydHMgSVBWNCBvbmx5KVxuLWQgICAgU2V0IFNPX0RFQlVHIG9wdGlvbnMgdG8gc29ja2V0XG4tbiAgICBQcmludCBudW1lcmljIGFkZHJlc3Nlc1xuLXYgICAgdmVyYm9zZVxuLXIgICAgQnlwYXNzIHJvdXRpbmcgdGFibGVzLCBzZW5kIGRpcmVjdGx5IHRvIEhPU1Rcbi1tICAgIE1heCB0aW1lLXRvLWxpdmUgKG1heCBudW1iZXIgb2YgaG9wcykoUkFOR0UgMSB0byAyNTUpXG4tcCAgICBCYXNlIFVEUCBwb3J0IG51bWJlciB1c2VkIGluIHByb2JlcyhkZWZhdWx0IDMzNDM0KShSQU5HRSAxIHRvIDY1NTM1KVxuLXEgICAgTnVtYmVyIG9mIHByb2JlcyBwZXIgVFRMIChkZWZhdWx0IDMpKFJBTkdFIDEgdG8gMjU1KVxuLXMgICAgSVAgYWRkcmVzcyB0byB1c2UgYXMgdGhlIHNvdXJjZSBhZGRyZXNzXG4tdCAgICBUeXBlLW9mLXNlcnZpY2UgaW4gcHJvYmUgcGFja2V0cyAoZGVmYXVsdCAwKShSQU5HRSAwIHRvIDI1NSlcbi13ICAgIFRpbWUgaW4gc2Vjb25kcyB0byB3YWl0IGZvciBhIHJlc3BvbnNlIChkZWZhdWx0IDMpKFJBTkdFIDAgdG8gODY0MDApXG4tZyAgICBMb29zZSBzb3VyY2Ugcm91dGUgZ2F0ZXdheSAoOCBtYXgpIChzdXBwb3J0cyBJUFY0IG9ubHkpXG4teiAgICBQYXVzZSBUaW1lIGluIG1zIChkZWZhdWx0IDApKFJBTkdFIDAgdG8gODY0MDApIChzdXBwb3J0cyBJUFY0IG9ubHkpXG4tZiAgICBTdGFydCBmcm9tIHRoZSAxU1RfVFRMIGhvcCAoaW5zdGVhZCBmcm9tIDEpKFJBTkdFIDEgdG8gMjU1KSAoc3VwcG9ydHMgSVBWNCBvbmx5KVxuLWkgICAgU3BlY2lmeSBhIG5ldHdvcmsgaW50ZXJmYWNlIHRvIG9wZXJhdGUgd2l0aCIKIAogI2RlZmluZSBIRUxQX3RyICJ1c2FnZTogdHIgWy1jZHNdIFNFVDEgW1NFVDJdXG5cblRyYW5zbGF0ZSwgc3F1ZWV6ZSwgb3IgZGVsZXRlIGNoYXJhY3RlcnMgZnJvbSBzdGRpbiwgd3JpdGluZyB0byBzdGRvdXRcblxuLWMvLUMgIFRha2UgY29tcGxlbWVudCBvZiBTRVQxXG4tZCAgICAgRGVsZXRlIGlucHV0IGNoYXJhY3RlcnMgY29kZWQgU0VUMVxuLXMgICAgIFNxdWVlemUgbXVsdGlwbGUgb3V0cHV0IGNoYXJhY3RlcnMgb2YgU0VUMiBpbnRvIG9uZSBjaGFyYWN0ZXIiCkBAIC0zNjgsNiArMzcyLDggQEAKIAogI2RlZmluZSBIRUxQX3Vuc2V0ICJ1c2FnZTogdW5zZXQgWy1mdm5dIE5BTUUuLi5cblxuLWYJTkFNRSBpcyBhIGZ1bmN0aW9uXG4tdglOQU1FIGlzIGEgdmFyaWFibGVcbi1uCWRlcmVmZXJlbmNlIE5BTUUgYW5kIHVuc2V0IHRoYXQiCiAKKyNkZWZpbmUgSEVMUF9zZXQgInVzYWdlOiBzZXQgWythXSBbK28gT1BUSU9OXSBbVkFSLi4uXVxuXG5TZXQgdmFyaWFibGVzIGFuZCBzaGVsbCBhdHRyaWJ1dGVzLiBVc2UgKyB0byBkaXNhYmxlIGFuZCAtIHRvIGVuYWJsZS5cbk5BTUU9VkFMVUUgYXJndW1lbnRzIGFzc2lnbiB0byB0aGUgdmFyaWFibGUsIGFueSBsZWZ0b3ZlcnMgc2V0ICQxLCAkMi4uLlxuV2l0aCBubyBhcmd1bWVudHMsIHByaW50cyBjdXJyZW50IHZhcmlhYmxlcy5cblxuLWYJTkFNRSBpcyBhIGZ1bmN0aW9uXG4tdglOQU1FIGlzIGEgdmFyaWFibGVcbi1uCWRlcmVmZXJlbmNlIE5BTUUgYW5kIHVuc2V0IHRoYXRcblxuT1BUSU9OczpcbiAgaGlzdG9yeSAtIGVuYWJsZSBjb21tYW5kIGhpc3RvcnkiCisKICNkZWZpbmUgSEVMUF9leGl0ICJ1c2FnZTogZXhpdCBbc3RhdHVzXVxuXG5FeGl0IHNoZWxsLiAgSWYgbm8gcmV0dXJuIHZhbHVlIHN1cHBsaWVkIG9uIGNvbW1hbmQgbGluZSwgdXNlIHZhbHVlXG5vZiBtb3N0IHJlY2VudCBjb21tYW5kLCBvciAwIGlmIG5vbmUuIgogCiAjZGVmaW5lIEhFTFBfY2QgInVzYWdlOiBjZCBbLVBMXSBbcGF0aF1cblxuQ2hhbmdlIGN1cnJlbnQgZGlyZWN0b3J5LiAgV2l0aCBubyBhcmd1bWVudHMsIGdvICRIT01FLlxuXG4tUAlQaHlzaWNhbCBwYXRoOiByZXNvbHZlIHN5bWxpbmtzIGluIHBhdGhcbi1MCUxvY2FsIHBhdGg6IC4uIHRyaW1zIGRpcmVjdG9yaWVzIG9mZiAkUFdEIChkZWZhdWx0KSIKQEAgLTQ5MCw3ICs0OTYsNyBAQAogCiAjZGVmaW5lIEhFTFBfdGltZSAidXNhZ2U6IHRpbWUgWy1wdl0gQ09NTUFORC4uLlxuXG5SdW4gY29tbWFuZCBsaW5lIGFuZCByZXBvcnQgcmVhbCwgdXNlciwgYW5kIHN5c3RlbSB0aW1lIGVsYXBzZWQgaW4gc2Vjb25kcy5cbihyZWFsID0gY2xvY2sgb24gdGhlIHdhbGwsIHVzZXIgPSBjcHUgdXNlZCBieSBjb21tYW5kJ3MgY29kZSxcbnN5c3RlbSA9IGNwdSB1c2VkIGJ5IE9TIG9uIGJlaGFsZiBvZiBjb21tYW5kLilcblxuLXAJUE9TSVggZm9ybWF0IG91dHB1dCAoZGVmYXVsdClcbi12CVZlcmJvc2UiCiAKLSNkZWZpbmUgSEVMUF90ZXN0ICJ1c2FnZTogdGVzdCBbLWJjZGVmZ2hMUHJTc3V3eCBQQVRIXSBbLW56IFNUUklOR10gWy10IEZEXSBbWCA/PyBZXVxuXG5SZXR1cm4gdHJ1ZSBvciBmYWxzZSBieSBwZXJmb3JtaW5nIHRlc3RzLiAoV2l0aCBubyBhcmd1bWVudHMgcmV0dXJuIGZhbHNlLilcblxuLS0tIFRlc3RzIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgKGFmdGVyIHRoZSBvcHRpb24pOlxuUEFUSCBpcy9oYXM6XG4gIC1iICBibG9jayBkZXZpY2UgICAtZiAgcmVndWxhciBmaWxlICAgLXAgIGZpZm8gICAgICAgICAgIC11ICBzZXR1aWQgYml0XG4gIC1jICBjaGFyIGRldmljZSAgICAtZyAgc2V0Z2lkICAgICAgICAgLXIgIHJlYWQgYml0ICAgICAgIC13ICB3cml0ZSBiaXRcbiAgLWQgIGRpcmVjdG9yeSAgICAgIC1oICBzeW1saW5rICAgICAgICAtUyAgc29ja2V0ICAgICAgICAgLXggIGV4ZWN1dGUgYml0XG4gIC1lICBleGlzdHMgICAgICAgICAtTCAgc3ltbGluayAgICAgICAgLXMgIG5vbnplcm8gc2l6ZVxuU1RSSU5HIGlzOlxuICAtbiAgbm9uemVybyBzaXplICAgLXogIHplcm8gc2l6ZSAgICAgIChTVFJJTkcgYnkgaXRzZWxmIGltcGxpZXMgLW4pXG5GRCAoaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IpIGlzOlxuICAtdCAgYSBUVFlcblxuLS0tIFRlc3RzIHdpdGggb25lIGFyZ3VtZW50IG9uIGVhY2ggc2lkZSBvZiBhbiBvcGVyYXRvcjpcblR3byBzdHJpbmdzOlxuICA9ICBhcmUgaWRlbnRpY2FsICAgIT0gIGRpZmZlclxuVHdvIGludGVnZXJzOlxuICAtZXEgIGVxdWFsICAgICAgICAgLWd0ICBmaXJzdCA+IHNlY29uZCAgICAtbHQgIGZpcnN0IDwgc2Vjb25kXG4gIC1uZSAgbm90IGVxdWFsICAgICAtZ2UgIGZpcnN0ID49IHNlY29uZCAgIC1sZSAgZmlyc3QgPD0gc2Vjb25kXG5cbi0tLSBNb2RpZnkgb3IgY29tYmluZSB0ZXN0czpcbiAgISBFWFBSICAgICBub3QgKHN3YXAgdHJ1ZS9mYWxzZSkgICBFWFBSIC1hIEVYUFIgICAgYW5kIChhcmUgYm90aCB0cnVlKVxuICAoIEVYUFIgKSAgIGV2YWx1YXRlIHRoaXMgZmlyc3QgICAgIEVYUFIgLW8gRVhQUiAgICBvciAoaXMgZWl0aGVyIHRydWUpIgorI2RlZmluZSBIRUxQX3Rlc3QgInVzYWdlOiB0ZXN0IFstYmNkZWZnaExQclNzdXd4IFBBVEhdIFstbnogU1RSSU5HXSBbLXQgRkRdIFtYID8/IFldXG5cblJldHVybiB0cnVlIG9yIGZhbHNlIGJ5IHBlcmZvcm1pbmcgdGVzdHMuIChXaXRoIG5vIGFyZ3VtZW50cyByZXR1cm4gZmFsc2UuKVxuXG4tLS0gVGVzdHMgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCAoYWZ0ZXIgdGhlIG9wdGlvbik6XG5QQVRIIGlzL2hhczpcbiAgLWIgIGJsb2NrIGRldmljZSAgIC1mICByZWd1bGFyIGZpbGUgICAtcCAgZmlmbyAgICAgICAgICAgLXUgIHNldHVpZCBiaXRcbiAgLWMgIGNoYXIgZGV2aWNlICAgIC1nICBzZXRnaWQgICAgICAgICAtciAgcmVhZCBiaXQgICAgICAgLXcgIHdyaXRlIGJpdFxuICAtZCAgZGlyZWN0b3J5ICAgICAgLWggIHN5bWxpbmsgICAgICAgIC1TICBzb2NrZXQgICAgICAgICAteCAgZXhlY3V0ZSBiaXRcbiAgLWUgIGV4aXN0cyAgICAgICAgIC1MICBzeW1saW5rICAgICAgICAtcyAgbm9uemVybyBzaXplICAgLWsgIHN0aWNreSBiaXRcblNUUklORyBpczpcbiAgLW4gIG5vbnplcm8gc2l6ZSAgIC16ICB6ZXJvIHNpemUgICAgICAoU1RSSU5HIGJ5IGl0c2VsZiBpbXBsaWVzIC1uKVxuRkQgKGludGVnZXIgZmlsZSBkZXNjcmlwdG9yKSBpczpcbiAgLXQgIGEgVFRZXG5cbi0tLSBUZXN0cyB3aXRoIG9uZSBhcmd1bWVudCBvbiBlYWNoIHNpZGUgb2YgYW4gb3BlcmF0b3I6XG5Ud28gc3RyaW5nczpcbiAgPSAgYXJlIGlkZW50aWNhbCAgICE9ICBkaWZmZXJcblR3byBpbnRlZ2VyczpcbiAgLWVxICBlcXVhbCAgICAgICAgIC1ndCAgZmlyc3QgPiBzZWNvbmQgICAgLWx0ICBmaXJzdCA8IHNlY29uZFxuICAtbmUgIG5vdCBlcXVhbCAgICAgLWdlICBmaXJzdCA+PSBzZWNvbmQgICAtbGUgIGZpcnN0IDw9IHNlY29uZFxuXG4tLS0gTW9kaWZ5IG9yIGNvbWJpbmUgdGVzdHM6XG4gICEgRVhQUiAgICAgbm90IChzd2FwIHRydWUvZmFsc2UpICAgRVhQUiAtYSBFWFBSICAgIGFuZCAoYXJlIGJvdGggdHJ1ZSlcbiAgKCBFWFBSICkgICBldmFsdWF0ZSB0aGlzIGZpcnN0ICAgICBFWFBSIC1vIEVYUFIgICAgb3IgKGlzIGVpdGhlciB0cnVlKSIKIAogI2RlZmluZSBIRUxQX3RlZSAidXNhZ2U6IHRlZSBbLWFpXSBbRklMRS4uLl1cblxuQ29weSBzdGRpbiB0byBlYWNoIGxpc3RlZCBmaWxlLCBhbmQgYWxzbyB0byBzdGRvdXQuXG5GaWxlbmFtZSBcIi1cIiBpcyBhIHN5bm9ueW0gZm9yIHN0ZG91dC5cblxuLWEJQXBwZW5kIHRvIGZpbGVzXG4taQlJZ25vcmUgU0lHSU5UIgogCkBAIC02MTIsNyArNjE4LDcgQEAKIAogI2RlZmluZSBIRUxQX2Nrc3VtICJ1c2FnZTogY2tzdW0gWy1JUExOXSBbRklMRS4uLl1cblxuRm9yIGVhY2ggZmlsZSwgb3V0cHV0IGNyYzMyIGNoZWNrc3VtIHZhbHVlLCBsZW5ndGggYW5kIG5hbWUgb2YgZmlsZS5cbklmIG5vIGZpbGVzIGxpc3RlZCwgY29weSBmcm9tIHN0ZGluLiAgRmlsZW5hbWUgXCItXCIgaXMgYSBzeW5vbnltIGZvciBzdGRpbi5cblxuLUgJSGV4YWRlY2ltYWwgY2hlY2tzdW0gKGRlZmF1bHRzIHRvIGRlY2ltYWwpXG4tTAlMaXR0bGUgZW5kaWFuIChkZWZhdWx0cyB0byBiaWcgZW5kaWFuKVxuLVAJUHJlLWludmVyc2lvblxuLUkJU2tpcCBwb3N0LWludmVyc2lvblxuLU4JRG8gbm90IGluY2x1ZGUgbGVuZ3RoIGluIENSQyBjYWxjdWxhdGlvbiAob3Igb3V0cHV0KSIKIAotI2RlZmluZSBIRUxQX2NobW9kICJ1c2FnZTogY2htb2QgWy1SXSBNT0RFIEZJTEUuLi5cblxuQ2hhbmdlIG1vZGUgb2YgbGlzdGVkIGZpbGVbc10gKHJlY3Vyc2l2ZWx5IHdpdGggLVIpLlxuXG5NT0RFIGNhbiBiZSAoY29tbWEtc2VwYXJhdGVkKSBzdGFuemFzOiBbdWdvYV1bKy09XVtyd3hzdFh1Z29dXG5cblN0YW56YXMgYXJlIGFwcGxpZWQgaW4gb3JkZXI6IEZvciBlYWNoIGNhdGVnb3J5ICh1ID0gdXNlcixcbmcgPSBncm91cCwgbyA9IG90aGVyLCBhID0gYWxsIHRocmVlLCBpZiBub25lIHNwZWNpZmllZCBkZWZhdWx0IGlzIGEpLFxuc2V0ICgrKSwgY2xlYXIgKC0pLCBvciBjb3B5ICg9KSwgciA9IHJlYWQsIHcgPSB3cml0ZSwgeCA9IGV4ZWN1dGUuXG5zID0gdStzID0gc3VpZCwgZytzID0gc2dpZCwgbytzID0gc3RpY2t5LiAoK3QgaXMgYW4gYWxpYXMgZm9yIG8rcykuXG5zdWlkL3NnaWQ6IGV4ZWN1dGUgYXMgdGhlIHVzZXIvZ3JvdXAgd2hvIG93bnMgdGhlIGZpbGUuXG5zdGlja3k6IGNhbid0IGRlbGV0ZSBmaWxlcyB5b3UgZG9uJ3Qgb3duIG91dCBvZiB0aGlzIGRpcmVjdG9yeVxuWCA9IHggZm9yIGRpcmVjdG9yaWVzIG9yIGlmIGFueSBjYXRlZ29yeSBhbHJlYWR5IGhhcyB4IHNldC5cblxuT3IgTU9ERSBjYW4gYmUgYW4gb2N0YWwgdmFsdWUgdXAgdG8gNzc3Nwl1ZyB1dXVnZ2dvb28JdG9wICtcbmJpdCAxID0gbyt4LCBiaXQgMTw8OCA9IHUrdywgMTw8MTEgPSBnKzEJc3N0cnd4cnd4cnd4CWJvdHRvbVxuXG5FeGFtcGxlczpcbmNobW9kIHUrdyBmaWxlIC0gYWxsb3cgb3duZXIgb2YgXCJmaWxlXCIgdG8gd3JpdGUgdG8gaXQuXG5jaG1vZCA3NDQgZmlsZSAtIHVzZXIgY2FuIHJlYWQvd3JpdGUvZXhlY3V0ZSwgZXZlcnlvbmUgZWxzZSByZWFkIG9ubHkiCisjZGVmaW5lIEhFTFBfY2htb2QgInVzYWdlOiBjaG1vZCBbLVJdIE1PREUgRklMRS4uLlxuXG5DaGFuZ2UgbW9kZSBvZiBsaXN0ZWQgZmlsZVtzXSAocmVjdXJzaXZlbHkgd2l0aCAtUikuXG5cbk1PREUgY2FuIGJlIChjb21tYS1zZXBhcmF0ZWQpIHN0YW56YXM6IFt1Z29hXVsrLT1dW3J3eHN0WHVnb11cblxuU3RhbnphcyBhcmUgYXBwbGllZCBpbiBvcmRlcjogRm9yIGVhY2ggY2F0ZWdvcnkgKHUgPSB1c2VyLFxuZyA9IGdyb3VwLCBvID0gb3RoZXIsIGEgPSBhbGwgdGhyZWUsIGlmIG5vbmUgc3BlY2lmaWVkIGRlZmF1bHQgaXMgYSksXG5zZXQgKCspLCBjbGVhciAoLSksIG9yIGNvcHkgKD0pLCByID0gcmVhZCwgdyA9IHdyaXRlLCB4ID0gZXhlY3V0ZS5cbnMgPSB1K3MgPSBzdWlkLCBnK3MgPSBzZ2lkLCArdCA9IHN0aWNreS4gKG8rcyBpZ25vcmVkIHNvIGErcyBkb2Vzbid0IHNldCArdClcbnN1aWQvc2dpZDogZXhlY3V0ZSBhcyB0aGUgdXNlci9ncm91cCB3aG8gb3ducyB0aGUgZmlsZS5cbnN0aWNreTogY2FuJ3QgZGVsZXRlIGZpbGVzIHlvdSBkb24ndCBvd24gb3V0IG9mIHRoaXMgZGlyZWN0b3J5XG5YID0geCBmb3IgZGlyZWN0b3JpZXMgb3IgaWYgYW55IGNhdGVnb3J5IGFscmVhZHkgaGFzIHggc2V0LlxuXG5PciBNT0RFIGNhbiBiZSBhbiBvY3RhbCB2YWx1ZSB1cCB0byA3Nzc3CXVnIHV1dWdnZ29vbwl0b3AgK1xuYml0IDEgPSBvK3gsIGJpdCAxPDw4ID0gdSt3LCAxPDwxMSA9IGcrMQlzc3Ryd3hyd3hyd3gJYm90dG9tXG5cbkV4YW1wbGVzOlxuY2htb2QgdSt3IGZpbGUgLSBhbGxvdyBvd25lciBvZiBcImZpbGVcIiB0byB3cml0ZSB0byBpdC5cbmNobW9kIDc0NCBmaWxlIC0gdXNlciBjYW4gcmVhZC93cml0ZS9leGVjdXRlLCBldmVyeW9uZSBlbHNlIHJlYWQgb25seSIKIAogI2RlZmluZSBIRUxQX2Nob3duICJzZWU6IGNoZ3JwIgogCmRpZmYgLS1naXQgYS9hbmRyb2lkL2RldmljZS9nZW5lcmF0ZWQvbmV3dG95cy5oIGIvYW5kcm9pZC9kZXZpY2UvZ2VuZXJhdGVkL25ld3RveXMuaAppbmRleCAxYjgzMjRmLi4zZTg2ZTY1IDEwMDY0NAotLS0gYS9hbmRyb2lkL2RldmljZS9nZW5lcmF0ZWQvbmV3dG95cy5oCisrKyBiL2FuZHJvaWQvZGV2aWNlL2dlbmVyYXRlZC9uZXd0b3lzLmgKQEAgLTQsNyArNCw3IEBACiBVU0VfU0goT0xEVE9ZKC10b3lzaCwgc2gsIDApKQogVVNFX1NIKE9MRFRPWSguLCBzb3VyY2UsIFRPWUZMQUdfTk9GT1JLKSkKIFVTRV9UUlVFKE9MRFRPWSg6LCB0cnVlLCBUT1lGTEFHX05PRk9SS3xUT1lGTEFHX05PSEVMUCkpCi1VU0VfVEVTVChPTERUT1koWywgdGVzdCwgVE9ZRkxBR19OT0ZPUkt8VE9ZRkxBR19OT0hFTFApKQorVVNFX1NIKE9MRFRPWShbLCB0ZXN0LCBUT1lGTEFHX05PRk9SS3xUT1lGTEFHX05PSEVMUCkpCiBVU0VfQUNQSShORVdUT1koYWNwaSwgImFiY3RWIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0dST1VQQUREKE9MRFRPWShhZGRncm91cCwgZ3JvdXBhZGQsIFRPWUZMQUdfTkVFRFJPT1R8VE9ZRkxBR19TQklOKSkKIFVTRV9VU0VSQUREKE9MRFRPWShhZGR1c2VyLCB1c2VyYWRkLCBUT1lGTEFHX05FRURST09UfFRPWUZMQUdfVU1BU0t8VE9ZRkxBR19TQklOKSkKQEAgLTEyLDYgKzEyLDcgQEAKIFVTRV9BUlAoTkVXVE9ZKGFycCwgInZpOm5Ec2RhcDpBOkg6WytBcF1bIXNkXSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9BUlBJTkcoTkVXVE9ZKGFycGluZywgIjwxPjFzOkk6dyM8MGMjPDBBVURicWZbK0FVXVsrRGZdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19TQklOKSkKIFVTRV9BU0NJSShORVdUT1koYXNjaWksIDAsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKK1VTRV9CQVNFMzIoTkVXVE9ZKGJhc2UzMiwgImRpdyM8MD03NlshZHddIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0JBU0U2NChORVdUT1koYmFzZTY0LCAiZGl3IzwwPTc2WyFkd10iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfQkFTRU5BTUUoTkVXVE9ZKGJhc2VuYW1lLCAiXjwxYXM6IiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX1NIKE9MRFRPWShiYXNoLCBzaCwgVE9ZRkxBR19CSU4pKQpAQCAtNjgsNyArNjksNyBAQAogVVNFX0RVKE5FV1RPWShkdSwgImQjPDA9LTFobWxjYUhrS0xzeGJbLUhMXVsta0ttaF0iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfRFVNUExFQVNFUyhORVdUT1koZHVtcGxlYXNlcywgIj4wYXJmOlshYXJdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0VDSE8oTkVXVE9ZKGVjaG8sICJeP0VlblstZUVdIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19NQVlGT1JLKSkKLVVTRV9FR1JFUChPTERUT1koZWdyZXAsIGdyZXAsIFRPWUZMQUdfQklOfFRPWUZMQUdfQVJHRkFJTCgyKSkpCitVU0VfRUdSRVAoT0xEVE9ZKGVncmVwLCBncmVwLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMil8VE9ZRkxBR19MSU5FQlVGKSkKIFVTRV9FSkVDVChORVdUT1koZWplY3QsICI+MXN0VFshdFRdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0VOVihORVdUT1koZW52LCAiXmkwdSoiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMTI1KSkpCiBVU0VfU0goTkVXVE9ZKGV2YWwsIDAsIFRPWUZMQUdfTk9GT1JLKSkKQEAgLTgxLDcgKzgyLDcgQEAKIFVTRV9GQUxMT0NBVEUoTkVXVE9ZKGZhbGxvY2F0ZSwgIj4xbCN8byMiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfRkFMU0UoTkVXVE9ZKGZhbHNlLCBOVUxMLCBUT1lGTEFHX0JJTnxUT1lGTEFHX05PSEVMUHxUT1lGTEFHX01BWUZPUkspKQogVVNFX0ZESVNLKE5FV1RPWShmZGlzaywgIkMjPDBIIzwwUyM8MGIjPDUxMnVsIiwgVE9ZRkxBR19TQklOKSkKLVVTRV9GR1JFUChPTERUT1koZmdyZXAsIGdyZXAsIFRPWUZMQUdfQklOfFRPWUZMQUdfQVJHRkFJTCgyKSkpCitVU0VfRkdSRVAoT0xEVE9ZKGZncmVwLCBncmVwLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMil8VE9ZRkxBR19MSU5FQlVGKSkKIFVTRV9GSUxFKE5FV1RPWShmaWxlLCAiPDFiaExzWyFoTF0iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfRklORChORVdUT1koZmluZCwgIj9eSExbLUhMXSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9GTE9DSyhORVdUT1koZmxvY2ssICI8MT4xbnN1eFstc3V4XSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKQEAgLTEwMCw3ICsxMDEsNyBAQAogVVNFX0dFVEZBVFRSKE5FV1RPWShnZXRmYXR0ciwgIihvbmx5LXZhbHVlcylkaG46IiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0dFVE9QVChORVdUT1koZ2V0b3B0LCAiXmEoYWx0ZXJuYXRpdmUpbjoobmFtZSlvOihvcHRpb25zKWwqKGxvbmcpKGxvbmdvcHRpb25zKVR1IiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0dFVFRZKE5FV1RPWShnZXR0eSwgIjwydCM8MEg6STpsOmY6aXdubUxoIiwgVE9ZRkxBR19TQklOKSkKLVVTRV9HUkVQKE5FV1RPWShncmVwLCAiKGxpbmUtYnVmZmVyZWQpKGNvbG9yKTo7KGV4Y2x1ZGUtZGlyKSpTKGV4Y2x1ZGUpKk0oaW5jbHVkZSkqWnpFRkhJYWIoYnl0ZS1vZmZzZXQpaChuby1maWxlbmFtZSlpbm8ob25seS1tYXRjaGluZylyUnN2d2NsKGZpbGVzLXdpdGgtbWF0Y2hlcylxKHF1aWV0KShzaWxlbnQpZSpmKkMjQiNBI20jeFshd3hdWyFFRnddIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19BUkdGQUlMKDIpKSkKK1VTRV9HUkVQKE5FV1RPWShncmVwLCAiKGxpbmUtYnVmZmVyZWQpKGNvbG9yKTo7KGV4Y2x1ZGUtZGlyKSpTKGV4Y2x1ZGUpKk0oaW5jbHVkZSkqWnpFRkhJYWIoYnl0ZS1vZmZzZXQpaChuby1maWxlbmFtZSlpbm8ob25seS1tYXRjaGluZylyUnN2d2NsKGZpbGVzLXdpdGgtbWF0Y2hlcylxKHF1aWV0KShzaWxlbnQpZSpmKkMjQiNBI20jeFshd3hdWyFFRnddIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19BUkdGQUlMKDIpfFRPWUZMQUdfTElORUJVRikpCiBVU0VfR1JPVVBBREQoTkVXVE9ZKGdyb3VwYWRkLCAiPDE+MmcjPDBTIiwgVE9ZRkxBR19ORUVEUk9PVHxUT1lGTEFHX1NCSU4pKQogVVNFX0dST1VQREVMKE5FV1RPWShncm91cGRlbCwgIjwxPjIiLCBUT1lGTEFHX05FRURST09UfFRPWUZMQUdfU0JJTikpCiBVU0VfR1JPVVBTKE5FV1RPWShncm91cHMsIE5VTEwsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKQEAgLTIwOCw2ICsyMDksNyBAQAogVVNFX1BTKE5FV1RPWShwcywgImsoc29ydCkqUChwcGlkKSphQWRlZmxNbm8qTypwKHBpZCkqcyp0KlR1KlUqZypHKndaWyFvbF1bK0FlXVshb09dIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19MT0NBTEUpKQogVVNFX1BXRChORVdUT1kocHdkLCAiPjBMUFstTFBdIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19NQVlGT1JLKSkKIFVTRV9QV0RYKE5FV1RPWShwd2R4LCAiPDFhIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQorVVNFX1BXR0VOKE5FV1RPWShwd2dlbiwgIj4ycihyZW1vdmUpOmMoY2FwaXRhbGl6ZSluKG51bWVyYWxzKXkoc3ltYm9scylzKHNlY3VyZSlCKGFtYmlndW91cyloKGhlbHApQzF2QShuby1jYXBpdGFsaXplKTAobm8tbnVtZXJhbHMpWy1jQV1bLW4wXVstQzFdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX1JFQURBSEVBRChORVdUT1kocmVhZGFoZWFkLCBOVUxMLCBUT1lGTEFHX0JJTikpCiBVU0VfUkVBREVMRihORVdUT1kocmVhZGVsZiwgIjwxKGR5bi1zeW1zKWFkZWhsbnA6U3NXeDoiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfUkVBRExJTksoTkVXVE9ZKHJlYWRsaW5rLCAiPDFucW1lZihjYW5vbmljYWxpemUpWy1tZWZdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQpAQCAtMjI3LDYgKzIyOSw3IEBACiBVU0VfU0VEKE5FV1RPWShzZWQsICIoaGVscCkodmVyc2lvbillKmYqaTo7bkVyeihudWxsLWRhdGEpc1srRXJdIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19MT0NBTEV8VE9ZRkxBR19OT0hFTFApKQogVVNFX1NFTkRFVkVOVChORVdUT1koc2VuZGV2ZW50LCAiPDQ+NCIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfU0JJTikpCiBVU0VfU0VRKE5FV1RPWShzZXEsICI8MT4zP2Y6czp3WyFmd10iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCitVU0VfU0goTkVXVE9ZKHNldCwgMCwgVE9ZRkxBR19OT0ZPUkspKQogVVNFX1NFVEVORk9SQ0UoTkVXVE9ZKHNldGVuZm9yY2UsICI8MT4xIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19TQklOKSkKIFVTRV9TRVRGQVRUUihORVdUT1koc2V0ZmF0dHIsICJobjp8djp4OnxbIXh2XSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9TRVRTSUQoTkVXVE9ZKHNldHNpZCwgIl48MXdjZFshZGNdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQpAQCAtMjg0LDYgKzI4Nyw3IEBACiBVU0VfVUxJTUlUKE5FV1RPWSh1bGltaXQsICI+MVAjPDFTSGF2dXRzclJxcG5tbGlmZWRjWy1TSF1bIWFwdnV0c3JScW5tbGlmZWRjXSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9VTU9VTlQoTkVXVE9ZKHVtb3VudCwgImNuZERmbHJhdCp2WyFuYV0iLCBUT1lGTEFHX0JJTnxUT1lGTEFHX1NUQVlST09UKSkKIFVTRV9VTkFNRShORVdUT1kodW5hbWUsICJvYW12cm5zWytvc10iLCBUT1lGTEFHX0JJTikpCitVU0VfVU5JQ09ERShORVdUT1kodW5pY29kZSwgIjwxIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX1VOSVEoTkVXVE9ZKHVuaXEsICJmI3MjdyN6aWNkdSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9VTklYMkRPUyhORVdUT1kodW5peDJkb3MsIDAsIFRPWUZMQUdfQklOKSkKIFVTRV9VTkxJTksoTkVXVE9ZKHVubGluaywgIjwxPjEiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCmRpZmYgLS1naXQgYS9hbmRyb2lkL2xpbnV4L2dlbmVyYXRlZC9jb25maWcuaCBiL2FuZHJvaWQvbGludXgvZ2VuZXJhdGVkL2NvbmZpZy5oCmluZGV4IGVjODhiY2EuLjM0MmRkYTMgMTAwNjQ0Ci0tLSBhL2FuZHJvaWQvbGludXgvZ2VuZXJhdGVkL2NvbmZpZy5oCisrKyBiL2FuZHJvaWQvbGludXgvZ2VuZXJhdGVkL2NvbmZpZy5oCkBAIC02NCw2ICs2NCw4IEBACiAjZGVmaW5lIFVTRV9BUlAoLi4uKQogI2RlZmluZSBDRkdfQVNDSUkgMAogI2RlZmluZSBVU0VfQVNDSUkoLi4uKQorI2RlZmluZSBDRkdfQkFTRTMyIDAKKyNkZWZpbmUgVVNFX0JBU0UzMiguLi4pCiAjZGVmaW5lIENGR19CQVNFNjQgMAogI2RlZmluZSBVU0VfQkFTRTY0KC4uLikKICNkZWZpbmUgQ0ZHX0JBU0VOQU1FIDEKQEAgLTQ1Niw2ICs0NTgsOCBAQAogI2RlZmluZSBVU0VfUFdEWCguLi4pCiAjZGVmaW5lIENGR19QV0QgMQogI2RlZmluZSBVU0VfUFdEKC4uLikgX19WQV9BUkdTX18KKyNkZWZpbmUgQ0ZHX1BXR0VOIDAKKyNkZWZpbmUgVVNFX1BXR0VOKC4uLikKICNkZWZpbmUgQ0ZHX1JFQURBSEVBRCAwCiAjZGVmaW5lIFVTRV9SRUFEQUhFQUQoLi4uKQogI2RlZmluZSBDRkdfUkVBREVMRiAwCkBAIC02MDAsNiArNjA0LDggQEAKICNkZWZpbmUgVVNFX1VNT1VOVCguLi4pCiAjZGVmaW5lIENGR19VTkFNRSAxCiAjZGVmaW5lIFVTRV9VTkFNRSguLi4pIF9fVkFfQVJHU19fCisjZGVmaW5lIENGR19VTklDT0RFIDAKKyNkZWZpbmUgVVNFX1VOSUNPREUoLi4uKQogI2RlZmluZSBDRkdfVU5JUSAxCiAjZGVmaW5lIFVTRV9VTklRKC4uLikgX19WQV9BUkdTX18KICNkZWZpbmUgQ0ZHX1VOSVgyRE9TIDEKZGlmZiAtLWdpdCBhL2FuZHJvaWQvbGludXgvZ2VuZXJhdGVkL2ZsYWdzLmggYi9hbmRyb2lkL2xpbnV4L2dlbmVyYXRlZC9mbGFncy5oCmluZGV4IDVhZWZkZGQuLmU2YmJiMzMgMTAwNjQ0Ci0tLSBhL2FuZHJvaWQvbGludXgvZ2VuZXJhdGVkL2ZsYWdzLmgKKysrIGIvYW5kcm9pZC9saW51eC9nZW5lcmF0ZWQvZmxhZ3MuaApAQCAtNzMsNiArNzMsMTcgQEAKICN1bmRlZiBGT1JfYXNjaWkKICNlbmRpZgogCisvLyBiYXNlMzIgICBkaXcjPDA9NzZbIWR3XQorI3VuZGVmIE9QVFNUUl9iYXNlMzIKKyNkZWZpbmUgT1BUU1RSX2Jhc2UzMiAiZGl3IzwwPTc2WyFkd10iCisjaWZkZWYgQ0xFQU5VUF9iYXNlMzIKKyN1bmRlZiBDTEVBTlVQX2Jhc2UzMgorI3VuZGVmIEZPUl9iYXNlMzIKKyN1bmRlZiBGTEFHX3cKKyN1bmRlZiBGTEFHX2kKKyN1bmRlZiBGTEFHX2QKKyNlbmRpZgorCiAvLyBiYXNlNjQgICBkaXcjPDA9NzZbIWR3XQogI3VuZGVmIE9QVFNUUl9iYXNlNjQKICNkZWZpbmUgT1BUU1RSX2Jhc2U2NCAiZGl3IzwwPTc2WyFkd10iCkBAIC0yMzQ0LDYgKzIzNTUsMjYgQEAKICN1bmRlZiBGTEFHX2EKICNlbmRpZgogCisvLyBwd2dlbiAgID4ycihyZW1vdmUpOmMoY2FwaXRhbGl6ZSluKG51bWVyYWxzKXkoc3ltYm9scylzKHNlY3VyZSlCKGFtYmlndW91cyloKGhlbHApQzF2QShuby1jYXBpdGFsaXplKTAobm8tbnVtZXJhbHMpWy1jQV1bLW4wXVstQzFdCisjdW5kZWYgT1BUU1RSX3B3Z2VuCisjZGVmaW5lIE9QVFNUUl9wd2dlbiAiPjJyKHJlbW92ZSk6YyhjYXBpdGFsaXplKW4obnVtZXJhbHMpeShzeW1ib2xzKXMoc2VjdXJlKUIoYW1iaWd1b3VzKWgoaGVscClDMXZBKG5vLWNhcGl0YWxpemUpMChuby1udW1lcmFscylbLWNBXVstbjBdWy1DMV0iCisjaWZkZWYgQ0xFQU5VUF9wd2dlbgorI3VuZGVmIENMRUFOVVBfcHdnZW4KKyN1bmRlZiBGT1JfcHdnZW4KKyN1bmRlZiBGTEFHXzAKKyN1bmRlZiBGTEFHX0EKKyN1bmRlZiBGTEFHX3YKKyN1bmRlZiBGTEFHXzEKKyN1bmRlZiBGTEFHX0MKKyN1bmRlZiBGTEFHX2gKKyN1bmRlZiBGTEFHX0IKKyN1bmRlZiBGTEFHX3MKKyN1bmRlZiBGTEFHX3kKKyN1bmRlZiBGTEFHX24KKyN1bmRlZiBGTEFHX2MKKyN1bmRlZiBGTEFHX3IKKyNlbmRpZgorCiAvLyByZWFkYWhlYWQgICAgCiAjdW5kZWYgT1BUU1RSX3JlYWRhaGVhZAogI2RlZmluZSBPUFRTVFJfcmVhZGFoZWFkIDAKQEAgLTI1NjAsNiArMjU5MSwxNCBAQAogI3VuZGVmIEZMQUdfZgogI2VuZGlmCiAKKy8vIHNldCAgICAKKyN1bmRlZiBPUFRTVFJfc2V0CisjZGVmaW5lIE9QVFNUUl9zZXQgMAorI2lmZGVmIENMRUFOVVBfc2V0CisjdW5kZWYgQ0xFQU5VUF9zZXQKKyN1bmRlZiBGT1Jfc2V0CisjZW5kaWYKKwogLy8gc2V0ZW5mb3JjZSAgIDwxPjEKICN1bmRlZiBPUFRTVFJfc2V0ZW5mb3JjZQogI2RlZmluZSBPUFRTVFJfc2V0ZW5mb3JjZSAiPDE+MSIKQEAgLTMyNDYsNiArMzI4NSwxNCBAQAogI3VuZGVmIEZMQUdfbwogI2VuZGlmCiAKKy8vIHVuaWNvZGUgICA8MQorI3VuZGVmIE9QVFNUUl91bmljb2RlCisjZGVmaW5lIE9QVFNUUl91bmljb2RlICI8MSIKKyNpZmRlZiBDTEVBTlVQX3VuaWNvZGUKKyN1bmRlZiBDTEVBTlVQX3VuaWNvZGUKKyN1bmRlZiBGT1JfdW5pY29kZQorI2VuZGlmCisKIC8vIHVuaXEgZiNzI3cjemljZHUgZiNzI3cjemljZHUKICN1bmRlZiBPUFRTVFJfdW5pcQogI2RlZmluZSBPUFRTVFJfdW5pcSAiZiNzI3cjemljZHUiCkBAIC0zNTk4LDYgKzM2NDUsMTUgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBGT1JfYmFzZTMyCisjaWZuZGVmIFRUCisjZGVmaW5lIFRUIHRoaXMuYmFzZTMyCisjZW5kaWYKKyNkZWZpbmUgRkxBR193IChGT1JDRURfRkxBRzw8MCkKKyNkZWZpbmUgRkxBR19pIChGT1JDRURfRkxBRzw8MSkKKyNkZWZpbmUgRkxBR19kIChGT1JDRURfRkxBRzw8MikKKyNlbmRpZgorCiAjaWZkZWYgRk9SX2Jhc2U2NAogI2lmbmRlZiBUVAogI2RlZmluZSBUVCB0aGlzLmJhc2U2NApAQCAtNTUxMyw2ICs1NTY5LDI0IEBACiAjZGVmaW5lIEZMQUdfYSAoRk9SQ0VEX0ZMQUc8PDApCiAjZW5kaWYKIAorI2lmZGVmIEZPUl9wd2dlbgorI2lmbmRlZiBUVAorI2RlZmluZSBUVCB0aGlzLnB3Z2VuCisjZW5kaWYKKyNkZWZpbmUgRkxBR18wIChGT1JDRURfRkxBRzw8MCkKKyNkZWZpbmUgRkxBR19BIChGT1JDRURfRkxBRzw8MSkKKyNkZWZpbmUgRkxBR192IChGT1JDRURfRkxBRzw8MikKKyNkZWZpbmUgRkxBR18xIChGT1JDRURfRkxBRzw8MykKKyNkZWZpbmUgRkxBR19DIChGT1JDRURfRkxBRzw8NCkKKyNkZWZpbmUgRkxBR19oIChGT1JDRURfRkxBRzw8NSkKKyNkZWZpbmUgRkxBR19CIChGT1JDRURfRkxBRzw8NikKKyNkZWZpbmUgRkxBR19zIChGT1JDRURfRkxBRzw8NykKKyNkZWZpbmUgRkxBR195IChGT1JDRURfRkxBRzw8OCkKKyNkZWZpbmUgRkxBR19uIChGT1JDRURfRkxBRzw8OSkKKyNkZWZpbmUgRkxBR19jIChGT1JDRURfRkxBRzw8MTApCisjZGVmaW5lIEZMQUdfciAoRk9SQ0VEX0ZMQUc8PDExKQorI2VuZGlmCisKICNpZmRlZiBGT1JfcmVhZGFoZWFkCiAjaWZuZGVmIFRUCiAjZGVmaW5lIFRUIHRoaXMucmVhZGFoZWFkCkBAIC01NjkxLDYgKzU3NjUsMTIgQEAKICNkZWZpbmUgRkxBR19mICgxPDwyKQogI2VuZGlmCiAKKyNpZmRlZiBGT1Jfc2V0CisjaWZuZGVmIFRUCisjZGVmaW5lIFRUIHRoaXMuc2V0CisjZW5kaWYKKyNlbmRpZgorCiAjaWZkZWYgRk9SX3NldGVuZm9yY2UKICNpZm5kZWYgVFQKICNkZWZpbmUgVFQgdGhpcy5zZXRlbmZvcmNlCkBAIC02Mjc1LDYgKzYzNTUsMTIgQEAKICNkZWZpbmUgRkxBR19vICgxPDw2KQogI2VuZGlmCiAKKyNpZmRlZiBGT1JfdW5pY29kZQorI2lmbmRlZiBUVAorI2RlZmluZSBUVCB0aGlzLnVuaWNvZGUKKyNlbmRpZgorI2VuZGlmCisKICNpZmRlZiBGT1JfdW5pcQogI2lmbmRlZiBUVAogI2RlZmluZSBUVCB0aGlzLnVuaXEKZGlmZiAtLWdpdCBhL2FuZHJvaWQvbGludXgvZ2VuZXJhdGVkL2dsb2JhbHMuaCBiL2FuZHJvaWQvbGludXgvZ2VuZXJhdGVkL2dsb2JhbHMuaAppbmRleCA5MDA1Y2VhLi44NzZlNDY4IDEwMDY0NAotLS0gYS9hbmRyb2lkL2xpbnV4L2dlbmVyYXRlZC9nbG9iYWxzLmgKKysrIGIvYW5kcm9pZC9saW51eC9nZW5lcmF0ZWQvZ2xvYmFscy5oCkBAIC0xMjQsNyArMTI0LDcgQEAKIHN0cnVjdCBzZXFfZGF0YSB7CiAgIGNoYXIgKnMsICpmOwogCi0gIGludCBwcmVjaXNpb247CisgIGludCBwcmVjaXNpb24sIGJ1ZmxlbjsKIH07CiAKIC8vIHRveXMvbHNiL3N1LmMKQEAgLTE2MSw4ICsxNjEsOCBAQAogc3RydWN0IG1pY3JvY29tX2RhdGEgewogICBsb25nIHM7CiAKLSAgaW50IGZkOwotICBzdHJ1Y3QgdGVybWlvcyBvcmlnaW5hbF9zdGRpbl9zdGF0ZSwgb3JpZ2luYWxfZmRfc3RhdGU7CisgIGludCBmZCwgc3RvazsKKyAgc3RydWN0IHRlcm1pb3Mgb2xkX3N0ZGluLCBvbGRfZmQ7CiB9OwogCiAvLyB0b3lzL25ldC9uZXRjYXQuYwpAQCAtMjE0LDggKzIxNCw5IEBACiAKIHN0cnVjdCBiYXNlNjRfZGF0YSB7CiAgIGxvbmcgdzsKLQogICB1bnNpZ25lZCB0b3RhbDsKKyAgdW5zaWduZWQgbjsgIC8vIG51bWJlciBvZiBiaXRzIHVzZWQgaW4gZW5jb2RpbmcuIDUgZm9yIGJhc2UzMiwgNiBmb3IgYmFzZTY0CisgIHVuc2lnbmVkIGFsaWduOyAgLy8gbnVtYmVyIG9mIGJpdHMgdG8gYWxpZ24gdG8KIH07CiAKIC8vIHRveXMvb3RoZXIvYmxrZGlzY2FyZC5jCkBAIC0zNzksNiArMzgwLDEyIEBACiAgIGNoYXIgKmM7CiB9OwogCisvLyB0b3lzL290aGVyL3B3Z2VuLmMKKworc3RydWN0IHB3Z2VuX2RhdGEgeworICBjaGFyICpyOworfTsKKwogLy8gdG95cy9vdGhlci9ydGN3YWtlLmMKIAogc3RydWN0IHJ0Y3dha2VfZGF0YSB7CkBAIC04NDEsMTEgKzg0OCwxMCBAQAogICAgIH0gZXhlYzsKICAgfTsKIAotICAvLyBrZWVwIGxpbmVubyBoZXJlOiB1c2VkIHRvIHdvcmsgYXJvdW5kIGNvbXBpbGVyIGxpbWl0YXRpb24gaW4gcnVuX2NvbW1hbmQoKQotICBsb25nIGxpbmVubzsKKyAgLy8ga2VlcCBpZnMgaGVyZTogdXNlZCB0byB3b3JrIGFyb3VuZCBjb21waWxlciBsaW1pdGF0aW9uIGluIHJ1bl9jb21tYW5kKCkKICAgY2hhciAqaWZzLCAqaXNleGVjLCAqd2NwYXQ7Ci0gIHVuc2lnbmVkIG9wdGlvbnMsIGpvYmNudDsKLSAgaW50IGhmZCwgcGlkLCBiYW5ncGlkLCB2YXJzbGVuLCBzaGlmdCwgY2Rjb3VudDsKKyAgdW5zaWduZWQgb3B0aW9ucywgam9iY250LCBMSU5FTk87CisgIGludCBoZmQsIHBpZCwgYmFuZ3BpZCwgdmFyc2xlbiwgY2Rjb3VudDsKICAgbG9uZyBsb25nIFNFQ09ORFM7CiAKICAgLy8gZ2xvYmFsIGFuZCBsb2NhbCB2YXJpYWJsZXMKQEAgLTg1Nyw4ICs4NjMsOSBAQAogICAvLyBQYXJzZWQgZnVuY3Rpb25zCiAgIHN0cnVjdCBzaF9mdW5jdGlvbiB7CiAgICAgY2hhciAqbmFtZTsKLSAgICBzdHJ1Y3Qgc2hfcGlwZWxpbmUgeyAgLy8gcGlwZWxpbmUgc2VnbWVudHMKKyAgICBzdHJ1Y3Qgc2hfcGlwZWxpbmUgeyAgLy8gcGlwZWxpbmUgc2VnbWVudHM6IGxpbmtlZCBsaXN0IG9mIGFyZyB3L21ldGFkYXRhCiAgICAgICBzdHJ1Y3Qgc2hfcGlwZWxpbmUgKm5leHQsICpwcmV2LCAqZW5kOworICAgICAgdW5zaWduZWQgbGluZW5vOwogICAgICAgaW50IGNvdW50LCBoZXJlLCB0eXBlOyAvLyBUT0RPIGFidXNlIHR5cGUgdG8gcmVwbGFjZSBjb3VudCBkdXJpbmcgcGFyc2luZwogICAgICAgc3RydWN0IHNoX2FyZyB7CiAgICAgICAgIGNoYXIgKip2OwpAQCAtODc4LDggKzg4NSwxNyBAQAogICAgIHN0cnVjdCBzaF9hcmcgKnJhdywgYXJnOwogICB9ICpwcDsgLy8gY3VycmVudGx5IHJ1bm5pbmcgcHJvY2VzcwogCisgIHN0cnVjdCBzaF9jYWxsc3RhY2sgeworICAgIHN0cnVjdCBzaF9jYWxsc3RhY2sgKm5leHQ7CisgICAgc3RydWN0IHNoX2Z1bmN0aW9uIHNjcmF0Y2g7CisgICAgc3RydWN0IHNoX2FyZyBhcmc7CisgICAgc3RydWN0IGFyZ19saXN0ICpkZWxldGU7CisgICAgdW5zaWduZWQgbGluZW5vOworICAgIGxvbmcgc2hpZnQ7CisgIH0gKmNjOworCiAgIC8vIGpvYiBsaXN0LCBjb21tYW5kIGxpbmUgZm9yICQqLCBzY3JhdGNoIHNwYWNlIGZvciBkb193aWxkY2FyZF9maWxlcygpCi0gIHN0cnVjdCBzaF9hcmcgam9icywgKmFyZywgKndjZGVjazsKKyAgc3RydWN0IHNoX2FyZyBqb2JzLCAqd2NkZWNrOwogfTsKIAogLy8gdG95cy9wZW5kaW5nL3N0dHkuYwpAQCAtMTQ5Miw2ICsxNTA4LDcgQEAKIAogc3RydWN0IHRlZV9kYXRhIHsKICAgdm9pZCAqb3V0cHV0czsKKyAgaW50IG91dDsKIH07CiAKIC8vIHRveXMvcG9zaXgvdG91Y2guYwpAQCAtMTU4Nyw2ICsxNjA0LDcgQEAKIAlzdHJ1Y3QgbW9kaW5mb19kYXRhIG1vZGluZm87CiAJc3RydWN0IG5zZW50ZXJfZGF0YSBuc2VudGVyOwogCXN0cnVjdCBvbmVpdF9kYXRhIG9uZWl0OworCXN0cnVjdCBwd2dlbl9kYXRhIHB3Z2VuOwogCXN0cnVjdCBydGN3YWtlX2RhdGEgcnRjd2FrZTsKIAlzdHJ1Y3Qgc2V0ZmF0dHJfZGF0YSBzZXRmYXR0cjsKIAlzdHJ1Y3Qgc2hhM3N1bV9kYXRhIHNoYTNzdW07CmRpZmYgLS1naXQgYS9hbmRyb2lkL2xpbnV4L2dlbmVyYXRlZC9oZWxwLmggYi9hbmRyb2lkL2xpbnV4L2dlbmVyYXRlZC9oZWxwLmgKaW5kZXggYmNjMWY3Ny4uZGZlNGE0MCAxMDA2NDQKLS0tIGEvYW5kcm9pZC9saW51eC9nZW5lcmF0ZWQvaGVscC5oCisrKyBiL2FuZHJvaWQvbGludXgvZ2VuZXJhdGVkL2hlbHAuaApAQCAtMTIsOCArMTIsNiBAQAogCiAjZGVmaW5lIEhFTFBfdG95Ym94X2ZyZWUgIldoZW4gYSBwcm9ncmFtIGV4aXRzLCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIGNsZWFuIHVwIGFmdGVyIGl0XG4oZnJlZSBtZW1vcnksIGNsb3NlIGZpbGVzLCBldGMpLiBUbyBzYXZlIHNpemUsIHRveWJveCB1c3VhbGx5IHJlbGllc1xub24gdGhpcyBiZWhhdmlvci4gSWYgeW91J3JlIHJ1bm5pbmcgdG95Ym94IHVuZGVyIGEgZGVidWdnZXIgb3JcbndpdGhvdXQgYSByZWFsIE9TIChhbGEgbmV3bGliK2xpYmdsb3NzKSwgZW5hYmxlIHRoaXMgdG8gbWFrZSB0b3lib3hcbmNsZWFuIHVwIGFmdGVyIGl0c2VsZi4iCiAKLSNkZWZpbmUgSEVMUF90b3lib3hfaTE4biAiU3VwcG9ydCBmb3IgVVRGLTggY2hhcmFjdGVyIHNldHMsIGFuZCBzb21lIGxvY2FsZSBzdXBwb3J0LiIKLQogI2RlZmluZSBIRUxQX3RveWJveF9oZWxwX2Rhc2hkYXNoICJTdXBwb3J0IC0taGVscCBhcmd1bWVudCBpbiBhbGwgY29tbWFuZHMsIGV2ZW4gb25lcyB3aXRoIGEgTlVMTFxub3B0c3RyaW5nLiAoVXNlIFRPWUZMQUdfTk9IRUxQIHRvIGRpc2FibGUuKSBQcm9kdWNlcyB0aGUgc2FtZSBvdXRwdXRcbmFzIFwiaGVscCBjb21tYW5kXCIuIC0tdmVyc2lvbiBzaG93cyB0b3lib3ggdmVyc2lvbi4iCiAKICNkZWZpbmUgSEVMUF90b3lib3hfaGVscCAiSW5jbHVkZSBoZWxwIHRleHQgZm9yIGVhY2ggY29tbWFuZC4iCkBAIC0yMDIsNiArMjAwLDggQEAKIAogI2RlZmluZSBIRUxQX3JlYWRhaGVhZCAidXNhZ2U6IHJlYWRhaGVhZCBGSUxFLi4uXG5cblByZWxvYWQgZmlsZXMgaW50byBkaXNrIGNhY2hlLiIKIAorI2RlZmluZSBIRUxQX3B3Z2VuICJ1c2FnZTogcHdnZW4gWy1jQW4weXJzQmhDMXZdIFtMRU5HVEhdIFtDT1VOVF1cblxuR2VuZXJhdGUgaHVtYW4tcmVhZGFibGUgcmFuZG9tIHBhc3N3b3Jkcy4gV2hlbiBvdXRwdXQgaXMgdG8gdHR5IHByb2R1Y2VzXG5hIHNjcmVlbmZ1bGwgdG8gZGVmZWF0IHNob3VsZGVyIHN1cmZpbmcgKHBpY2sgb25lIGFuZCBjbGVhciB0aGUgc2NyZWVuKS5cblxuLWMgIC0tY2FwaXRhbGl6ZSAgICAgICAgICAgICAgICAgIFBlcm1pdCBjYXBpdGFsIGxldHRlcnMuXG4tQSAgLS1uby1jYXBpdGFsaXplICAgICAgICAgICAgICAgRG9uJ3QgaW5jbHVkZSBjYXBpdGFsIGxldHRlcnMuXG4tbiAgLS1udW1lcmFscyAgICAgICAgICAgICAgICAgICAgUGVybWl0IG51bWJlcnMuXG4tMCAgLS1uby1udW1lcmFscyAgICAgICAgICAgICAgICAgRG9uJ3QgaW5jbHVkZSBudW1iZXJzLlxuLXkgIC0tc3ltYm9scyAgICAgICAgICAgICAgICAgICAgIFBlcm1pdCBzcGVjaWFsIGNoYXJhY3RlcnMgKCQjJS4uLikuXG4tciA8Y2hhcnM+ICAtLXJlbW92ZT08Y2hhcnM+ICAgICAgRG9uJ3QgaW5jbHVkZSB0aGUgZ2l2ZW4gY2hhcmFjdGVycy5cbi1zICAtLXNlY3VyZSAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZSBtb3JlIHJhbmRvbSBwYXNzd29yZHMuXG4tQiAgLS1hbWJpZ3VvdXMgICAgICAgICAgICAgICAgICAgQXZvaWQgYW1iaWd1b3VzIGNoYXJhY3RlcnMgKGUuZy4gMCwgTykuXG4taCAgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnQgdGhpcyBoZWxwIG1lc3NhZ2UuXG4tQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnQgdGhlIG91dHB1dCBpbiBjb2x1bW5zLlxuLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW50IHRoZSBvdXRwdXQgb25lIGxpbmUgZWFjaC5cbi12ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIHZvd2Vscy4iCisKICNkZWZpbmUgSEVMUF9wd2R4ICJ1c2FnZTogcHdkeCBQSUQuLi5cblxuUHJpbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgcHJvY2Vzc2VzIGxpc3RlZCBvbiBjb21tYW5kIGxpbmUuIgogCiAjZGVmaW5lIEhFTFBfcHJpbnRlbnYgInVzYWdlOiBwcmludGVudiBbLTBdIFtlbnZfdmFyLi4uXVxuXG5QcmludCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG5cbi0wCVVzZSBcXDAgYXMgZGVsaW1pdGVyIGluc3RlYWQgb2YgXFxuIgpAQCAtMzIwLDYgKzMyMCw4IEBACiAKICNkZWZpbmUgSEVMUF9ibGtkaXNjYXJkICJ1c2FnZTogYmxrZGlzY2FyZCBbLW9sc3pmXSBERVZJQ0VcblxuRGlzY2FyZCBkZXZpY2Ugc2VjdG9ycy5cblxuLW8sIC0tb2Zmc2V0IE9GRglCeXRlIG9mZnNldCB0byBzdGFydCBkaXNjYXJkaW5nIGF0IChkZWZhdWx0IDApXG4tbCwgLS1sZW5ndGggTEVOCUJ5dGVzIHRvIGRpc2NhcmQgKGRlZmF1bHQgYWxsKVxuLXMsIC0tc2VjdXJlCQlQZXJmb3JtIHNlY3VyZSBkaXNjYXJkXG4teiwgLS16ZXJvb3V0CQlaZXJvLWZpbGwgcmF0aGVyIHRoYW4gZGlzY2FyZFxuLWYsIC0tZm9yY2UJCURpc2FibGUgY2hlY2sgZm9yIG1vdW50ZWQgZmlsZXN5c3RlbVxuXG5PRkYgYW5kIExFTiBtdXN0IGJlIGFsaWduZWQgdG8gdGhlIGRldmljZSBzZWN0b3Igc2l6ZS5cbkJ5IGRlZmF1bHQgZW50aXJlIGRldmljZSBpcyBkaXNjYXJkZWQuXG5XQVJOSU5HOiBBbGwgZGlzY2FyZGVkIGRhdGEgaXMgcGVybWFuZW50bHkgbG9zdCEiCiAKKyNkZWZpbmUgSEVMUF9iYXNlMzIgInVzYWdlOiBiYXNlMzIgWy1kaV0gWy13IENPTFVNTlNdIFtGSUxFLi4uXVxuXG5FbmNvZGUgb3IgZGVjb2RlIGluIGJhc2UzMi5cblxuLWQJRGVjb2RlXG4taQlJZ25vcmUgbm9uLWFscGhhYmV0aWMgY2hhcmFjdGVyc1xuLXcJV3JhcCBvdXRwdXQgYXQgQ09MVU1OUyAoZGVmYXVsdCA3NiBvciAwIGZvciBubyB3cmFwKSIKKwogI2RlZmluZSBIRUxQX2Jhc2U2NCAidXNhZ2U6IGJhc2U2NCBbLWRpXSBbLXcgQ09MVU1OU10gW0ZJTEUuLi5dXG5cbkVuY29kZSBvciBkZWNvZGUgaW4gYmFzZTY0LlxuXG4tZAlEZWNvZGVcbi1pCUlnbm9yZSBub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXJzXG4tdwlXcmFwIG91dHB1dCBhdCBDT0xVTU5TIChkZWZhdWx0IDc2IG9yIDAgZm9yIG5vIHdyYXApIgogCiAjZGVmaW5lIEhFTFBfYXNjaWkgInVzYWdlOiBhc2NpaVxuXG5EaXNwbGF5IGFzY2lpIGNoYXJhY3RlciBzZXQuIgpAQCAtMzM2LDYgKzMzOCw4IEBACiAKICNkZWZpbmUgSEVMUF91c2VyYWRkICJ1c2FnZTogdXNlcmFkZCBbLVNESF0gWy1oIERJUl0gWy1zIFNIRUxMXSBbLUcgR1JQXSBbLWcgTkFNRV0gWy11IFVJRF0gVVNFUiBbR1JPVVBdXG5cbkNyZWF0ZSBuZXcgdXNlciwgb3IgYWRkIFVTRVIgdG8gR1JPVVBcblxuLUQgICAgICAgRG9uJ3QgYXNzaWduIGEgcGFzc3dvcmRcbi1nIE5BTUUgIFJlYWwgbmFtZVxuLUcgR1JQICAgQWRkIHVzZXIgdG8gZXhpc3RpbmcgZ3JvdXBcbi1oIERJUiAgIEhvbWUgZGlyZWN0b3J5XG4tSCAgICAgICBEb24ndCBjcmVhdGUgaG9tZSBkaXJlY3Rvcnlcbi1zIFNIRUxMIExvZ2luIHNoZWxsXG4tUyAgICAgICBDcmVhdGUgYSBzeXN0ZW0gdXNlclxuLXUgVUlEICAgVXNlciBpZCIKIAorI2RlZmluZSBIRUxQX3VuaWNvZGUgInVzYWdlOiB1bmljb2RlIFtbbWluXS1tYXhdXG5cbkNvbnZlcnQgYmV0d2VlbiBVbmljb2RlIGNvZGUgcG9pbnRzIGFuZCBVVEYtOCwgaW4gYm90aCBkaXJlY3Rpb25zLiIKKwogI2RlZmluZSBIRUxQX3RyYWNlcm91dGUgInVzYWdlOiB0cmFjZXJvdXRlIFstNDZGVUlsZG52cl0gWy1mIDFTVF9UVExdIFstbSBNQVhUVExdIFstcCBQT1JUXSBbLXEgUFJPQkVTXVxuWy1zIFNSQ19JUF0gWy10IFRPU10gWy13IFdBSVRfU0VDXSBbLWcgR0FURVdBWV0gWy1pIElGQUNFXSBbLXogUEFVU0VfTVNFQ10gSE9TVCBbQllURVNdXG5cbnRyYWNlcm91dGU2IFstZG5ydl0gWy1tIE1BWFRUTF0gWy1wIFBPUlRdIFstcSBQUk9CRVNdWy1zIFNSQ19JUF0gWy10IFRPU10gWy13IFdBSVRfU0VDXVxuICBbLWkgSUZBQ0VdIEhPU1QgW0JZVEVTXVxuXG5UcmFjZSB0aGUgcm91dGUgdG8gSE9TVFxuXG4tNCwtNiBGb3JjZSBJUCBvciBJUHY2IG5hbWUgcmVzb2x1dGlvblxuLUYgICAgU2V0IHRoZSBkb24ndCBmcmFnbWVudCBiaXQgKHN1cHBvcnRzIElQVjQgb25seSlcbi1VICAgIFVzZSBVRFAgZGF0YWdyYW1zIGluc3RlYWQgb2YgSUNNUCBFQ0hPIChzdXBwb3J0cyBJUFY0IG9ubHkpXG4tSSAgICBVc2UgSUNNUCBFQ0hPIGluc3RlYWQgb2YgVURQIGRhdGFncmFtcyAoc3VwcG9ydHMgSVBWNCBvbmx5KVxuLWwgICAgRGlzcGxheSB0aGUgVFRMIHZhbHVlIG9mIHRoZSByZXR1cm5lZCBwYWNrZXQgKHN1cHBvcnRzIElQVjQgb25seSlcbi1kICAgIFNldCBTT19ERUJVRyBvcHRpb25zIHRvIHNvY2tldFxuLW4gICAgUHJpbnQgbnVtZXJpYyBhZGRyZXNzZXNcbi12ICAgIHZlcmJvc2Vcbi1yICAgIEJ5cGFzcyByb3V0aW5nIHRhYmxlcywgc2VuZCBkaXJlY3RseSB0byBIT1NUXG4tbSAgICBNYXggdGltZS10by1saXZlIChtYXggbnVtYmVyIG9mIGhvcHMpKFJBTkdFIDEgdG8gMjU1KVxuLXAgICAgQmFzZSBVRFAgcG9ydCBudW1iZXIgdXNlZCBpbiBwcm9iZXMoZGVmYXVsdCAzMzQzNCkoUkFOR0UgMSB0byA2NTUzNSlcbi1xICAgIE51bWJlciBvZiBwcm9iZXMgcGVyIFRUTCAoZGVmYXVsdCAzKShSQU5HRSAxIHRvIDI1NSlcbi1zICAgIElQIGFkZHJlc3MgdG8gdXNlIGFzIHRoZSBzb3VyY2UgYWRkcmVzc1xuLXQgICAgVHlwZS1vZi1zZXJ2aWNlIGluIHByb2JlIHBhY2tldHMgKGRlZmF1bHQgMCkoUkFOR0UgMCB0byAyNTUpXG4tdyAgICBUaW1lIGluIHNlY29uZHMgdG8gd2FpdCBmb3IgYSByZXNwb25zZSAoZGVmYXVsdCAzKShSQU5HRSAwIHRvIDg2NDAwKVxuLWcgICAgTG9vc2Ugc291cmNlIHJvdXRlIGdhdGV3YXkgKDggbWF4KSAoc3VwcG9ydHMgSVBWNCBvbmx5KVxuLXogICAgUGF1c2UgVGltZSBpbiBtcyAoZGVmYXVsdCAwKShSQU5HRSAwIHRvIDg2NDAwKSAoc3VwcG9ydHMgSVBWNCBvbmx5KVxuLWYgICAgU3RhcnQgZnJvbSB0aGUgMVNUX1RUTCBob3AgKGluc3RlYWQgZnJvbSAxKShSQU5HRSAxIHRvIDI1NSkgKHN1cHBvcnRzIElQVjQgb25seSlcbi1pICAgIFNwZWNpZnkgYSBuZXR3b3JrIGludGVyZmFjZSB0byBvcGVyYXRlIHdpdGgiCiAKICNkZWZpbmUgSEVMUF90ciAidXNhZ2U6IHRyIFstY2RzXSBTRVQxIFtTRVQyXVxuXG5UcmFuc2xhdGUsIHNxdWVlemUsIG9yIGRlbGV0ZSBjaGFyYWN0ZXJzIGZyb20gc3RkaW4sIHdyaXRpbmcgdG8gc3Rkb3V0XG5cbi1jLy1DICBUYWtlIGNvbXBsZW1lbnQgb2YgU0VUMVxuLWQgICAgIERlbGV0ZSBpbnB1dCBjaGFyYWN0ZXJzIGNvZGVkIFNFVDFcbi1zICAgICBTcXVlZXplIG11bHRpcGxlIG91dHB1dCBjaGFyYWN0ZXJzIG9mIFNFVDIgaW50byBvbmUgY2hhcmFjdGVyIgpAQCAtMzcwLDYgKzM3NCw4IEBACiAKICNkZWZpbmUgSEVMUF91bnNldCAidXNhZ2U6IHVuc2V0IFstZnZuXSBOQU1FLi4uXG5cbi1mCU5BTUUgaXMgYSBmdW5jdGlvblxuLXYJTkFNRSBpcyBhIHZhcmlhYmxlXG4tbglkZXJlZmVyZW5jZSBOQU1FIGFuZCB1bnNldCB0aGF0IgogCisjZGVmaW5lIEhFTFBfc2V0ICJ1c2FnZTogc2V0IFsrYV0gWytvIE9QVElPTl0gW1ZBUi4uLl1cblxuU2V0IHZhcmlhYmxlcyBhbmQgc2hlbGwgYXR0cmlidXRlcy4gVXNlICsgdG8gZGlzYWJsZSBhbmQgLSB0byBlbmFibGUuXG5OQU1FPVZBTFVFIGFyZ3VtZW50cyBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlLCBhbnkgbGVmdG92ZXJzIHNldCAkMSwgJDIuLi5cbldpdGggbm8gYXJndW1lbnRzLCBwcmludHMgY3VycmVudCB2YXJpYWJsZXMuXG5cbi1mCU5BTUUgaXMgYSBmdW5jdGlvblxuLXYJTkFNRSBpcyBhIHZhcmlhYmxlXG4tbglkZXJlZmVyZW5jZSBOQU1FIGFuZCB1bnNldCB0aGF0XG5cbk9QVElPTnM6XG4gIGhpc3RvcnkgLSBlbmFibGUgY29tbWFuZCBoaXN0b3J5IgorCiAjZGVmaW5lIEhFTFBfZXhpdCAidXNhZ2U6IGV4aXQgW3N0YXR1c11cblxuRXhpdCBzaGVsbC4gIElmIG5vIHJldHVybiB2YWx1ZSBzdXBwbGllZCBvbiBjb21tYW5kIGxpbmUsIHVzZSB2YWx1ZVxub2YgbW9zdCByZWNlbnQgY29tbWFuZCwgb3IgMCBpZiBub25lLiIKIAogI2RlZmluZSBIRUxQX2NkICJ1c2FnZTogY2QgWy1QTF0gW3BhdGhdXG5cbkNoYW5nZSBjdXJyZW50IGRpcmVjdG9yeS4gIFdpdGggbm8gYXJndW1lbnRzLCBnbyAkSE9NRS5cblxuLVAJUGh5c2ljYWwgcGF0aDogcmVzb2x2ZSBzeW1saW5rcyBpbiBwYXRoXG4tTAlMb2NhbCBwYXRoOiAuLiB0cmltcyBkaXJlY3RvcmllcyBvZmYgJFBXRCAoZGVmYXVsdCkiCkBAIC00OTIsNyArNDk4LDcgQEAKIAogI2RlZmluZSBIRUxQX3RpbWUgInVzYWdlOiB0aW1lIFstcHZdIENPTU1BTkQuLi5cblxuUnVuIGNvbW1hbmQgbGluZSBhbmQgcmVwb3J0IHJlYWwsIHVzZXIsIGFuZCBzeXN0ZW0gdGltZSBlbGFwc2VkIGluIHNlY29uZHMuXG4ocmVhbCA9IGNsb2NrIG9uIHRoZSB3YWxsLCB1c2VyID0gY3B1IHVzZWQgYnkgY29tbWFuZCdzIGNvZGUsXG5zeXN0ZW0gPSBjcHUgdXNlZCBieSBPUyBvbiBiZWhhbGYgb2YgY29tbWFuZC4pXG5cbi1wCVBPU0lYIGZvcm1hdCBvdXRwdXQgKGRlZmF1bHQpXG4tdglWZXJib3NlIgogCi0jZGVmaW5lIEhFTFBfdGVzdCAidXNhZ2U6IHRlc3QgWy1iY2RlZmdoTFByU3N1d3ggUEFUSF0gWy1ueiBTVFJJTkddIFstdCBGRF0gW1ggPz8gWV1cblxuUmV0dXJuIHRydWUgb3IgZmFsc2UgYnkgcGVyZm9ybWluZyB0ZXN0cy4gKFdpdGggbm8gYXJndW1lbnRzIHJldHVybiBmYWxzZS4pXG5cbi0tLSBUZXN0cyB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IChhZnRlciB0aGUgb3B0aW9uKTpcblBBVEggaXMvaGFzOlxuICAtYiAgYmxvY2sgZGV2aWNlICAgLWYgIHJlZ3VsYXIgZmlsZSAgIC1wICBmaWZvICAgICAgICAgICAtdSAgc2V0dWlkIGJpdFxuICAtYyAgY2hhciBkZXZpY2UgICAgLWcgIHNldGdpZCAgICAgICAgIC1yICByZWFkIGJpdCAgICAgICAtdyAgd3JpdGUgYml0XG4gIC1kICBkaXJlY3RvcnkgICAgICAtaCAgc3ltbGluayAgICAgICAgLVMgIHNvY2tldCAgICAgICAgIC14ICBleGVjdXRlIGJpdFxuICAtZSAgZXhpc3RzICAgICAgICAgLUwgIHN5bWxpbmsgICAgICAgIC1zICBub256ZXJvIHNpemVcblNUUklORyBpczpcbiAgLW4gIG5vbnplcm8gc2l6ZSAgIC16ICB6ZXJvIHNpemUgICAgICAoU1RSSU5HIGJ5IGl0c2VsZiBpbXBsaWVzIC1uKVxuRkQgKGludGVnZXIgZmlsZSBkZXNjcmlwdG9yKSBpczpcbiAgLXQgIGEgVFRZXG5cbi0tLSBUZXN0cyB3aXRoIG9uZSBhcmd1bWVudCBvbiBlYWNoIHNpZGUgb2YgYW4gb3BlcmF0b3I6XG5Ud28gc3RyaW5nczpcbiAgPSAgYXJlIGlkZW50aWNhbCAgICE9ICBkaWZmZXJcblR3byBpbnRlZ2VyczpcbiAgLWVxICBlcXVhbCAgICAgICAgIC1ndCAgZmlyc3QgPiBzZWNvbmQgICAgLWx0ICBmaXJzdCA8IHNlY29uZFxuICAtbmUgIG5vdCBlcXVhbCAgICAgLWdlICBmaXJzdCA+PSBzZWNvbmQgICAtbGUgIGZpcnN0IDw9IHNlY29uZFxuXG4tLS0gTW9kaWZ5IG9yIGNvbWJpbmUgdGVzdHM6XG4gICEgRVhQUiAgICAgbm90IChzd2FwIHRydWUvZmFsc2UpICAgRVhQUiAtYSBFWFBSICAgIGFuZCAoYXJlIGJvdGggdHJ1ZSlcbiAgKCBFWFBSICkgICBldmFsdWF0ZSB0aGlzIGZpcnN0ICAgICBFWFBSIC1vIEVYUFIgICAgb3IgKGlzIGVpdGhlciB0cnVlKSIKKyNkZWZpbmUgSEVMUF90ZXN0ICJ1c2FnZTogdGVzdCBbLWJjZGVmZ2hMUHJTc3V3eCBQQVRIXSBbLW56IFNUUklOR10gWy10IEZEXSBbWCA/PyBZXVxuXG5SZXR1cm4gdHJ1ZSBvciBmYWxzZSBieSBwZXJmb3JtaW5nIHRlc3RzLiAoV2l0aCBubyBhcmd1bWVudHMgcmV0dXJuIGZhbHNlLilcblxuLS0tIFRlc3RzIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgKGFmdGVyIHRoZSBvcHRpb24pOlxuUEFUSCBpcy9oYXM6XG4gIC1iICBibG9jayBkZXZpY2UgICAtZiAgcmVndWxhciBmaWxlICAgLXAgIGZpZm8gICAgICAgICAgIC11ICBzZXR1aWQgYml0XG4gIC1jICBjaGFyIGRldmljZSAgICAtZyAgc2V0Z2lkICAgICAgICAgLXIgIHJlYWQgYml0ICAgICAgIC13ICB3cml0ZSBiaXRcbiAgLWQgIGRpcmVjdG9yeSAgICAgIC1oICBzeW1saW5rICAgICAgICAtUyAgc29ja2V0ICAgICAgICAgLXggIGV4ZWN1dGUgYml0XG4gIC1lICBleGlzdHMgICAgICAgICAtTCAgc3ltbGluayAgICAgICAgLXMgIG5vbnplcm8gc2l6ZSAgIC1rICBzdGlja3kgYml0XG5TVFJJTkcgaXM6XG4gIC1uICBub256ZXJvIHNpemUgICAteiAgemVybyBzaXplICAgICAgKFNUUklORyBieSBpdHNlbGYgaW1wbGllcyAtbilcbkZEIChpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvcikgaXM6XG4gIC10ICBhIFRUWVxuXG4tLS0gVGVzdHMgd2l0aCBvbmUgYXJndW1lbnQgb24gZWFjaCBzaWRlIG9mIGFuIG9wZXJhdG9yOlxuVHdvIHN0cmluZ3M6XG4gID0gIGFyZSBpZGVudGljYWwgICAhPSAgZGlmZmVyXG5Ud28gaW50ZWdlcnM6XG4gIC1lcSAgZXF1YWwgICAgICAgICAtZ3QgIGZpcnN0ID4gc2Vjb25kICAgIC1sdCAgZmlyc3QgPCBzZWNvbmRcbiAgLW5lICBub3QgZXF1YWwgICAgIC1nZSAgZmlyc3QgPj0gc2Vjb25kICAgLWxlICBmaXJzdCA8PSBzZWNvbmRcblxuLS0tIE1vZGlmeSBvciBjb21iaW5lIHRlc3RzOlxuICAhIEVYUFIgICAgIG5vdCAoc3dhcCB0cnVlL2ZhbHNlKSAgIEVYUFIgLWEgRVhQUiAgICBhbmQgKGFyZSBib3RoIHRydWUpXG4gICggRVhQUiApICAgZXZhbHVhdGUgdGhpcyBmaXJzdCAgICAgRVhQUiAtbyBFWFBSICAgIG9yIChpcyBlaXRoZXIgdHJ1ZSkiCiAKICNkZWZpbmUgSEVMUF90ZWUgInVzYWdlOiB0ZWUgWy1haV0gW0ZJTEUuLi5dXG5cbkNvcHkgc3RkaW4gdG8gZWFjaCBsaXN0ZWQgZmlsZSwgYW5kIGFsc28gdG8gc3Rkb3V0LlxuRmlsZW5hbWUgXCItXCIgaXMgYSBzeW5vbnltIGZvciBzdGRvdXQuXG5cbi1hCUFwcGVuZCB0byBmaWxlc1xuLWkJSWdub3JlIFNJR0lOVCIKIApAQCAtNjE4LDcgKzYyNCw3IEBACiAKICNkZWZpbmUgSEVMUF9ja3N1bSAidXNhZ2U6IGNrc3VtIFstSVBMTl0gW0ZJTEUuLi5dXG5cbkZvciBlYWNoIGZpbGUsIG91dHB1dCBjcmMzMiBjaGVja3N1bSB2YWx1ZSwgbGVuZ3RoIGFuZCBuYW1lIG9mIGZpbGUuXG5JZiBubyBmaWxlcyBsaXN0ZWQsIGNvcHkgZnJvbSBzdGRpbi4gIEZpbGVuYW1lIFwiLVwiIGlzIGEgc3lub255bSBmb3Igc3RkaW4uXG5cbi1ICUhleGFkZWNpbWFsIGNoZWNrc3VtIChkZWZhdWx0cyB0byBkZWNpbWFsKVxuLUwJTGl0dGxlIGVuZGlhbiAoZGVmYXVsdHMgdG8gYmlnIGVuZGlhbilcbi1QCVByZS1pbnZlcnNpb25cbi1JCVNraXAgcG9zdC1pbnZlcnNpb25cbi1OCURvIG5vdCBpbmNsdWRlIGxlbmd0aCBpbiBDUkMgY2FsY3VsYXRpb24gKG9yIG91dHB1dCkiCiAKLSNkZWZpbmUgSEVMUF9jaG1vZCAidXNhZ2U6IGNobW9kIFstUl0gTU9ERSBGSUxFLi4uXG5cbkNoYW5nZSBtb2RlIG9mIGxpc3RlZCBmaWxlW3NdIChyZWN1cnNpdmVseSB3aXRoIC1SKS5cblxuTU9ERSBjYW4gYmUgKGNvbW1hLXNlcGFyYXRlZCkgc3RhbnphczogW3Vnb2FdWystPV1bcnd4c3RYdWdvXVxuXG5TdGFuemFzIGFyZSBhcHBsaWVkIGluIG9yZGVyOiBGb3IgZWFjaCBjYXRlZ29yeSAodSA9IHVzZXIsXG5nID0gZ3JvdXAsIG8gPSBvdGhlciwgYSA9IGFsbCB0aHJlZSwgaWYgbm9uZSBzcGVjaWZpZWQgZGVmYXVsdCBpcyBhKSxcbnNldCAoKyksIGNsZWFyICgtKSwgb3IgY29weSAoPSksIHIgPSByZWFkLCB3ID0gd3JpdGUsIHggPSBleGVjdXRlLlxucyA9IHUrcyA9IHN1aWQsIGcrcyA9IHNnaWQsIG8rcyA9IHN0aWNreS4gKCt0IGlzIGFuIGFsaWFzIGZvciBvK3MpLlxuc3VpZC9zZ2lkOiBleGVjdXRlIGFzIHRoZSB1c2VyL2dyb3VwIHdobyBvd25zIHRoZSBmaWxlLlxuc3RpY2t5OiBjYW4ndCBkZWxldGUgZmlsZXMgeW91IGRvbid0IG93biBvdXQgb2YgdGhpcyBkaXJlY3RvcnlcblggPSB4IGZvciBkaXJlY3RvcmllcyBvciBpZiBhbnkgY2F0ZWdvcnkgYWxyZWFkeSBoYXMgeCBzZXQuXG5cbk9yIE1PREUgY2FuIGJlIGFuIG9jdGFsIHZhbHVlIHVwIHRvIDc3NzcJdWcgdXV1Z2dnb29vCXRvcCArXG5iaXQgMSA9IG8reCwgYml0IDE8PDggPSB1K3csIDE8PDExID0gZysxCXNzdHJ3eHJ3eHJ3eAlib3R0b21cblxuRXhhbXBsZXM6XG5jaG1vZCB1K3cgZmlsZSAtIGFsbG93IG93bmVyIG9mIFwiZmlsZVwiIHRvIHdyaXRlIHRvIGl0LlxuY2htb2QgNzQ0IGZpbGUgLSB1c2VyIGNhbiByZWFkL3dyaXRlL2V4ZWN1dGUsIGV2ZXJ5b25lIGVsc2UgcmVhZCBvbmx5IgorI2RlZmluZSBIRUxQX2NobW9kICJ1c2FnZTogY2htb2QgWy1SXSBNT0RFIEZJTEUuLi5cblxuQ2hhbmdlIG1vZGUgb2YgbGlzdGVkIGZpbGVbc10gKHJlY3Vyc2l2ZWx5IHdpdGggLVIpLlxuXG5NT0RFIGNhbiBiZSAoY29tbWEtc2VwYXJhdGVkKSBzdGFuemFzOiBbdWdvYV1bKy09XVtyd3hzdFh1Z29dXG5cblN0YW56YXMgYXJlIGFwcGxpZWQgaW4gb3JkZXI6IEZvciBlYWNoIGNhdGVnb3J5ICh1ID0gdXNlcixcbmcgPSBncm91cCwgbyA9IG90aGVyLCBhID0gYWxsIHRocmVlLCBpZiBub25lIHNwZWNpZmllZCBkZWZhdWx0IGlzIGEpLFxuc2V0ICgrKSwgY2xlYXIgKC0pLCBvciBjb3B5ICg9KSwgciA9IHJlYWQsIHcgPSB3cml0ZSwgeCA9IGV4ZWN1dGUuXG5zID0gdStzID0gc3VpZCwgZytzID0gc2dpZCwgK3QgPSBzdGlja3kuIChvK3MgaWdub3JlZCBzbyBhK3MgZG9lc24ndCBzZXQgK3QpXG5zdWlkL3NnaWQ6IGV4ZWN1dGUgYXMgdGhlIHVzZXIvZ3JvdXAgd2hvIG93bnMgdGhlIGZpbGUuXG5zdGlja3k6IGNhbid0IGRlbGV0ZSBmaWxlcyB5b3UgZG9uJ3Qgb3duIG91dCBvZiB0aGlzIGRpcmVjdG9yeVxuWCA9IHggZm9yIGRpcmVjdG9yaWVzIG9yIGlmIGFueSBjYXRlZ29yeSBhbHJlYWR5IGhhcyB4IHNldC5cblxuT3IgTU9ERSBjYW4gYmUgYW4gb2N0YWwgdmFsdWUgdXAgdG8gNzc3Nwl1ZyB1dXVnZ2dvb28JdG9wICtcbmJpdCAxID0gbyt4LCBiaXQgMTw8OCA9IHUrdywgMTw8MTEgPSBnKzEJc3N0cnd4cnd4cnd4CWJvdHRvbVxuXG5FeGFtcGxlczpcbmNobW9kIHUrdyBmaWxlIC0gYWxsb3cgb3duZXIgb2YgXCJmaWxlXCIgdG8gd3JpdGUgdG8gaXQuXG5jaG1vZCA3NDQgZmlsZSAtIHVzZXIgY2FuIHJlYWQvd3JpdGUvZXhlY3V0ZSwgZXZlcnlvbmUgZWxzZSByZWFkIG9ubHkiCiAKICNkZWZpbmUgSEVMUF9jaG93biAic2VlOiBjaGdycCIKIApkaWZmIC0tZ2l0IGEvYW5kcm9pZC9saW51eC9nZW5lcmF0ZWQvbmV3dG95cy5oIGIvYW5kcm9pZC9saW51eC9nZW5lcmF0ZWQvbmV3dG95cy5oCmluZGV4IDFiODMyNGYuLjNlODZlNjUgMTAwNjQ0Ci0tLSBhL2FuZHJvaWQvbGludXgvZ2VuZXJhdGVkL25ld3RveXMuaAorKysgYi9hbmRyb2lkL2xpbnV4L2dlbmVyYXRlZC9uZXd0b3lzLmgKQEAgLTQsNyArNCw3IEBACiBVU0VfU0goT0xEVE9ZKC10b3lzaCwgc2gsIDApKQogVVNFX1NIKE9MRFRPWSguLCBzb3VyY2UsIFRPWUZMQUdfTk9GT1JLKSkKIFVTRV9UUlVFKE9MRFRPWSg6LCB0cnVlLCBUT1lGTEFHX05PRk9SS3xUT1lGTEFHX05PSEVMUCkpCi1VU0VfVEVTVChPTERUT1koWywgdGVzdCwgVE9ZRkxBR19OT0ZPUkt8VE9ZRkxBR19OT0hFTFApKQorVVNFX1NIKE9MRFRPWShbLCB0ZXN0LCBUT1lGTEFHX05PRk9SS3xUT1lGTEFHX05PSEVMUCkpCiBVU0VfQUNQSShORVdUT1koYWNwaSwgImFiY3RWIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0dST1VQQUREKE9MRFRPWShhZGRncm91cCwgZ3JvdXBhZGQsIFRPWUZMQUdfTkVFRFJPT1R8VE9ZRkxBR19TQklOKSkKIFVTRV9VU0VSQUREKE9MRFRPWShhZGR1c2VyLCB1c2VyYWRkLCBUT1lGTEFHX05FRURST09UfFRPWUZMQUdfVU1BU0t8VE9ZRkxBR19TQklOKSkKQEAgLTEyLDYgKzEyLDcgQEAKIFVTRV9BUlAoTkVXVE9ZKGFycCwgInZpOm5Ec2RhcDpBOkg6WytBcF1bIXNkXSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9BUlBJTkcoTkVXVE9ZKGFycGluZywgIjwxPjFzOkk6dyM8MGMjPDBBVURicWZbK0FVXVsrRGZdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19TQklOKSkKIFVTRV9BU0NJSShORVdUT1koYXNjaWksIDAsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKK1VTRV9CQVNFMzIoTkVXVE9ZKGJhc2UzMiwgImRpdyM8MD03NlshZHddIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0JBU0U2NChORVdUT1koYmFzZTY0LCAiZGl3IzwwPTc2WyFkd10iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfQkFTRU5BTUUoTkVXVE9ZKGJhc2VuYW1lLCAiXjwxYXM6IiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX1NIKE9MRFRPWShiYXNoLCBzaCwgVE9ZRkxBR19CSU4pKQpAQCAtNjgsNyArNjksNyBAQAogVVNFX0RVKE5FV1RPWShkdSwgImQjPDA9LTFobWxjYUhrS0xzeGJbLUhMXVsta0ttaF0iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfRFVNUExFQVNFUyhORVdUT1koZHVtcGxlYXNlcywgIj4wYXJmOlshYXJdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0VDSE8oTkVXVE9ZKGVjaG8sICJeP0VlblstZUVdIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19NQVlGT1JLKSkKLVVTRV9FR1JFUChPTERUT1koZWdyZXAsIGdyZXAsIFRPWUZMQUdfQklOfFRPWUZMQUdfQVJHRkFJTCgyKSkpCitVU0VfRUdSRVAoT0xEVE9ZKGVncmVwLCBncmVwLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMil8VE9ZRkxBR19MSU5FQlVGKSkKIFVTRV9FSkVDVChORVdUT1koZWplY3QsICI+MXN0VFshdFRdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0VOVihORVdUT1koZW52LCAiXmkwdSoiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMTI1KSkpCiBVU0VfU0goTkVXVE9ZKGV2YWwsIDAsIFRPWUZMQUdfTk9GT1JLKSkKQEAgLTgxLDcgKzgyLDcgQEAKIFVTRV9GQUxMT0NBVEUoTkVXVE9ZKGZhbGxvY2F0ZSwgIj4xbCN8byMiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfRkFMU0UoTkVXVE9ZKGZhbHNlLCBOVUxMLCBUT1lGTEFHX0JJTnxUT1lGTEFHX05PSEVMUHxUT1lGTEFHX01BWUZPUkspKQogVVNFX0ZESVNLKE5FV1RPWShmZGlzaywgIkMjPDBIIzwwUyM8MGIjPDUxMnVsIiwgVE9ZRkxBR19TQklOKSkKLVVTRV9GR1JFUChPTERUT1koZmdyZXAsIGdyZXAsIFRPWUZMQUdfQklOfFRPWUZMQUdfQVJHRkFJTCgyKSkpCitVU0VfRkdSRVAoT0xEVE9ZKGZncmVwLCBncmVwLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMil8VE9ZRkxBR19MSU5FQlVGKSkKIFVTRV9GSUxFKE5FV1RPWShmaWxlLCAiPDFiaExzWyFoTF0iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfRklORChORVdUT1koZmluZCwgIj9eSExbLUhMXSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9GTE9DSyhORVdUT1koZmxvY2ssICI8MT4xbnN1eFstc3V4XSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKQEAgLTEwMCw3ICsxMDEsNyBAQAogVVNFX0dFVEZBVFRSKE5FV1RPWShnZXRmYXR0ciwgIihvbmx5LXZhbHVlcylkaG46IiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0dFVE9QVChORVdUT1koZ2V0b3B0LCAiXmEoYWx0ZXJuYXRpdmUpbjoobmFtZSlvOihvcHRpb25zKWwqKGxvbmcpKGxvbmdvcHRpb25zKVR1IiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0dFVFRZKE5FV1RPWShnZXR0eSwgIjwydCM8MEg6STpsOmY6aXdubUxoIiwgVE9ZRkxBR19TQklOKSkKLVVTRV9HUkVQKE5FV1RPWShncmVwLCAiKGxpbmUtYnVmZmVyZWQpKGNvbG9yKTo7KGV4Y2x1ZGUtZGlyKSpTKGV4Y2x1ZGUpKk0oaW5jbHVkZSkqWnpFRkhJYWIoYnl0ZS1vZmZzZXQpaChuby1maWxlbmFtZSlpbm8ob25seS1tYXRjaGluZylyUnN2d2NsKGZpbGVzLXdpdGgtbWF0Y2hlcylxKHF1aWV0KShzaWxlbnQpZSpmKkMjQiNBI20jeFshd3hdWyFFRnddIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19BUkdGQUlMKDIpKSkKK1VTRV9HUkVQKE5FV1RPWShncmVwLCAiKGxpbmUtYnVmZmVyZWQpKGNvbG9yKTo7KGV4Y2x1ZGUtZGlyKSpTKGV4Y2x1ZGUpKk0oaW5jbHVkZSkqWnpFRkhJYWIoYnl0ZS1vZmZzZXQpaChuby1maWxlbmFtZSlpbm8ob25seS1tYXRjaGluZylyUnN2d2NsKGZpbGVzLXdpdGgtbWF0Y2hlcylxKHF1aWV0KShzaWxlbnQpZSpmKkMjQiNBI20jeFshd3hdWyFFRnddIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19BUkdGQUlMKDIpfFRPWUZMQUdfTElORUJVRikpCiBVU0VfR1JPVVBBREQoTkVXVE9ZKGdyb3VwYWRkLCAiPDE+MmcjPDBTIiwgVE9ZRkxBR19ORUVEUk9PVHxUT1lGTEFHX1NCSU4pKQogVVNFX0dST1VQREVMKE5FV1RPWShncm91cGRlbCwgIjwxPjIiLCBUT1lGTEFHX05FRURST09UfFRPWUZMQUdfU0JJTikpCiBVU0VfR1JPVVBTKE5FV1RPWShncm91cHMsIE5VTEwsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKQEAgLTIwOCw2ICsyMDksNyBAQAogVVNFX1BTKE5FV1RPWShwcywgImsoc29ydCkqUChwcGlkKSphQWRlZmxNbm8qTypwKHBpZCkqcyp0KlR1KlUqZypHKndaWyFvbF1bK0FlXVshb09dIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19MT0NBTEUpKQogVVNFX1BXRChORVdUT1kocHdkLCAiPjBMUFstTFBdIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19NQVlGT1JLKSkKIFVTRV9QV0RYKE5FV1RPWShwd2R4LCAiPDFhIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQorVVNFX1BXR0VOKE5FV1RPWShwd2dlbiwgIj4ycihyZW1vdmUpOmMoY2FwaXRhbGl6ZSluKG51bWVyYWxzKXkoc3ltYm9scylzKHNlY3VyZSlCKGFtYmlndW91cyloKGhlbHApQzF2QShuby1jYXBpdGFsaXplKTAobm8tbnVtZXJhbHMpWy1jQV1bLW4wXVstQzFdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX1JFQURBSEVBRChORVdUT1kocmVhZGFoZWFkLCBOVUxMLCBUT1lGTEFHX0JJTikpCiBVU0VfUkVBREVMRihORVdUT1kocmVhZGVsZiwgIjwxKGR5bi1zeW1zKWFkZWhsbnA6U3NXeDoiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfUkVBRExJTksoTkVXVE9ZKHJlYWRsaW5rLCAiPDFucW1lZihjYW5vbmljYWxpemUpWy1tZWZdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQpAQCAtMjI3LDYgKzIyOSw3IEBACiBVU0VfU0VEKE5FV1RPWShzZWQsICIoaGVscCkodmVyc2lvbillKmYqaTo7bkVyeihudWxsLWRhdGEpc1srRXJdIiwgVE9ZRkxBR19CSU58VE9ZRkxBR19MT0NBTEV8VE9ZRkxBR19OT0hFTFApKQogVVNFX1NFTkRFVkVOVChORVdUT1koc2VuZGV2ZW50LCAiPDQ+NCIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfU0JJTikpCiBVU0VfU0VRKE5FV1RPWShzZXEsICI8MT4zP2Y6czp3WyFmd10iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCitVU0VfU0goTkVXVE9ZKHNldCwgMCwgVE9ZRkxBR19OT0ZPUkspKQogVVNFX1NFVEVORk9SQ0UoTkVXVE9ZKHNldGVuZm9yY2UsICI8MT4xIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19TQklOKSkKIFVTRV9TRVRGQVRUUihORVdUT1koc2V0ZmF0dHIsICJobjp8djp4OnxbIXh2XSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9TRVRTSUQoTkVXVE9ZKHNldHNpZCwgIl48MXdjZFshZGNdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQpAQCAtMjg0LDYgKzI4Nyw3IEBACiBVU0VfVUxJTUlUKE5FV1RPWSh1bGltaXQsICI+MVAjPDFTSGF2dXRzclJxcG5tbGlmZWRjWy1TSF1bIWFwdnV0c3JScW5tbGlmZWRjXSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9VTU9VTlQoTkVXVE9ZKHVtb3VudCwgImNuZERmbHJhdCp2WyFuYV0iLCBUT1lGTEFHX0JJTnxUT1lGTEFHX1NUQVlST09UKSkKIFVTRV9VTkFNRShORVdUT1kodW5hbWUsICJvYW12cm5zWytvc10iLCBUT1lGTEFHX0JJTikpCitVU0VfVU5JQ09ERShORVdUT1kodW5pY29kZSwgIjwxIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX1VOSVEoTkVXVE9ZKHVuaXEsICJmI3MjdyN6aWNkdSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9VTklYMkRPUyhORVdUT1kodW5peDJkb3MsIDAsIFRPWUZMQUdfQklOKSkKIFVTRV9VTkxJTksoTkVXVE9ZKHVubGluaywgIjwxPjEiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCmRpZmYgLS1naXQgYS9hbmRyb2lkL21hYy9nZW5lcmF0ZWQvY29uZmlnLmggYi9hbmRyb2lkL21hYy9nZW5lcmF0ZWQvY29uZmlnLmgKaW5kZXggYjM5ZWM5MS4uZDAzYjc0YSAxMDA2NDQKLS0tIGEvYW5kcm9pZC9tYWMvZ2VuZXJhdGVkL2NvbmZpZy5oCisrKyBiL2FuZHJvaWQvbWFjL2dlbmVyYXRlZC9jb25maWcuaApAQCAtNjQsNiArNjQsOCBAQAogI2RlZmluZSBVU0VfQVJQKC4uLikKICNkZWZpbmUgQ0ZHX0FTQ0lJIDAKICNkZWZpbmUgVVNFX0FTQ0lJKC4uLikKKyNkZWZpbmUgQ0ZHX0JBU0UzMiAwCisjZGVmaW5lIFVTRV9CQVNFMzIoLi4uKQogI2RlZmluZSBDRkdfQkFTRTY0IDAKICNkZWZpbmUgVVNFX0JBU0U2NCguLi4pCiAjZGVmaW5lIENGR19CQVNFTkFNRSAxCkBAIC00NTYsNiArNDU4LDggQEAKICNkZWZpbmUgVVNFX1BXRFgoLi4uKQogI2RlZmluZSBDRkdfUFdEIDEKICNkZWZpbmUgVVNFX1BXRCguLi4pIF9fVkFfQVJHU19fCisjZGVmaW5lIENGR19QV0dFTiAwCisjZGVmaW5lIFVTRV9QV0dFTiguLi4pCiAjZGVmaW5lIENGR19SRUFEQUhFQUQgMAogI2RlZmluZSBVU0VfUkVBREFIRUFEKC4uLikKICNkZWZpbmUgQ0ZHX1JFQURFTEYgMApAQCAtNjAwLDYgKzYwNCw4IEBACiAjZGVmaW5lIFVTRV9VTU9VTlQoLi4uKQogI2RlZmluZSBDRkdfVU5BTUUgMQogI2RlZmluZSBVU0VfVU5BTUUoLi4uKSBfX1ZBX0FSR1NfXworI2RlZmluZSBDRkdfVU5JQ09ERSAwCisjZGVmaW5lIFVTRV9VTklDT0RFKC4uLikKICNkZWZpbmUgQ0ZHX1VOSVEgMQogI2RlZmluZSBVU0VfVU5JUSguLi4pIF9fVkFfQVJHU19fCiAjZGVmaW5lIENGR19VTklYMkRPUyAxCmRpZmYgLS1naXQgYS9hbmRyb2lkL21hYy9nZW5lcmF0ZWQvZmxhZ3MuaCBiL2FuZHJvaWQvbWFjL2dlbmVyYXRlZC9mbGFncy5oCmluZGV4IGMyYTliODIuLmFlNWQ1OGEgMTAwNjQ0Ci0tLSBhL2FuZHJvaWQvbWFjL2dlbmVyYXRlZC9mbGFncy5oCisrKyBiL2FuZHJvaWQvbWFjL2dlbmVyYXRlZC9mbGFncy5oCkBAIC03Myw2ICs3MywxNyBAQAogI3VuZGVmIEZPUl9hc2NpaQogI2VuZGlmCiAKKy8vIGJhc2UzMiAgIGRpdyM8MD03NlshZHddCisjdW5kZWYgT1BUU1RSX2Jhc2UzMgorI2RlZmluZSBPUFRTVFJfYmFzZTMyICJkaXcjPDA9NzZbIWR3XSIKKyNpZmRlZiBDTEVBTlVQX2Jhc2UzMgorI3VuZGVmIENMRUFOVVBfYmFzZTMyCisjdW5kZWYgRk9SX2Jhc2UzMgorI3VuZGVmIEZMQUdfdworI3VuZGVmIEZMQUdfaQorI3VuZGVmIEZMQUdfZAorI2VuZGlmCisKIC8vIGJhc2U2NCAgIGRpdyM8MD03NlshZHddCiAjdW5kZWYgT1BUU1RSX2Jhc2U2NAogI2RlZmluZSBPUFRTVFJfYmFzZTY0ICJkaXcjPDA9NzZbIWR3XSIKQEAgLTIzNDQsNiArMjM1NSwyNiBAQAogI3VuZGVmIEZMQUdfYQogI2VuZGlmCiAKKy8vIHB3Z2VuICAgPjJyKHJlbW92ZSk6YyhjYXBpdGFsaXplKW4obnVtZXJhbHMpeShzeW1ib2xzKXMoc2VjdXJlKUIoYW1iaWd1b3VzKWgoaGVscClDMXZBKG5vLWNhcGl0YWxpemUpMChuby1udW1lcmFscylbLWNBXVstbjBdWy1DMV0KKyN1bmRlZiBPUFRTVFJfcHdnZW4KKyNkZWZpbmUgT1BUU1RSX3B3Z2VuICI+MnIocmVtb3ZlKTpjKGNhcGl0YWxpemUpbihudW1lcmFscyl5KHN5bWJvbHMpcyhzZWN1cmUpQihhbWJpZ3VvdXMpaChoZWxwKUMxdkEobm8tY2FwaXRhbGl6ZSkwKG5vLW51bWVyYWxzKVstY0FdWy1uMF1bLUMxXSIKKyNpZmRlZiBDTEVBTlVQX3B3Z2VuCisjdW5kZWYgQ0xFQU5VUF9wd2dlbgorI3VuZGVmIEZPUl9wd2dlbgorI3VuZGVmIEZMQUdfMAorI3VuZGVmIEZMQUdfQQorI3VuZGVmIEZMQUdfdgorI3VuZGVmIEZMQUdfMQorI3VuZGVmIEZMQUdfQworI3VuZGVmIEZMQUdfaAorI3VuZGVmIEZMQUdfQgorI3VuZGVmIEZMQUdfcworI3VuZGVmIEZMQUdfeQorI3VuZGVmIEZMQUdfbgorI3VuZGVmIEZMQUdfYworI3VuZGVmIEZMQUdfcgorI2VuZGlmCisKIC8vIHJlYWRhaGVhZCAgICAKICN1bmRlZiBPUFRTVFJfcmVhZGFoZWFkCiAjZGVmaW5lIE9QVFNUUl9yZWFkYWhlYWQgMApAQCAtMjU2MCw2ICsyNTkxLDE0IEBACiAjdW5kZWYgRkxBR19mCiAjZW5kaWYKIAorLy8gc2V0ICAgIAorI3VuZGVmIE9QVFNUUl9zZXQKKyNkZWZpbmUgT1BUU1RSX3NldCAwCisjaWZkZWYgQ0xFQU5VUF9zZXQKKyN1bmRlZiBDTEVBTlVQX3NldAorI3VuZGVmIEZPUl9zZXQKKyNlbmRpZgorCiAvLyBzZXRlbmZvcmNlICAgPDE+MQogI3VuZGVmIE9QVFNUUl9zZXRlbmZvcmNlCiAjZGVmaW5lIE9QVFNUUl9zZXRlbmZvcmNlICI8MT4xIgpAQCAtMzI0Niw2ICszMjg1LDE0IEBACiAjdW5kZWYgRkxBR19vCiAjZW5kaWYKIAorLy8gdW5pY29kZSAgIDwxCisjdW5kZWYgT1BUU1RSX3VuaWNvZGUKKyNkZWZpbmUgT1BUU1RSX3VuaWNvZGUgIjwxIgorI2lmZGVmIENMRUFOVVBfdW5pY29kZQorI3VuZGVmIENMRUFOVVBfdW5pY29kZQorI3VuZGVmIEZPUl91bmljb2RlCisjZW5kaWYKKwogLy8gdW5pcSBmI3MjdyN6aWNkdSBmI3MjdyN6aWNkdQogI3VuZGVmIE9QVFNUUl91bmlxCiAjZGVmaW5lIE9QVFNUUl91bmlxICJmI3MjdyN6aWNkdSIKQEAgLTM1OTgsNiArMzY0NSwxNSBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmZGVmIEZPUl9iYXNlMzIKKyNpZm5kZWYgVFQKKyNkZWZpbmUgVFQgdGhpcy5iYXNlMzIKKyNlbmRpZgorI2RlZmluZSBGTEFHX3cgKEZPUkNFRF9GTEFHPDwwKQorI2RlZmluZSBGTEFHX2kgKEZPUkNFRF9GTEFHPDwxKQorI2RlZmluZSBGTEFHX2QgKEZPUkNFRF9GTEFHPDwyKQorI2VuZGlmCisKICNpZmRlZiBGT1JfYmFzZTY0CiAjaWZuZGVmIFRUCiAjZGVmaW5lIFRUIHRoaXMuYmFzZTY0CkBAIC01NTEzLDYgKzU1NjksMjQgQEAKICNkZWZpbmUgRkxBR19hIChGT1JDRURfRkxBRzw8MCkKICNlbmRpZgogCisjaWZkZWYgRk9SX3B3Z2VuCisjaWZuZGVmIFRUCisjZGVmaW5lIFRUIHRoaXMucHdnZW4KKyNlbmRpZgorI2RlZmluZSBGTEFHXzAgKEZPUkNFRF9GTEFHPDwwKQorI2RlZmluZSBGTEFHX0EgKEZPUkNFRF9GTEFHPDwxKQorI2RlZmluZSBGTEFHX3YgKEZPUkNFRF9GTEFHPDwyKQorI2RlZmluZSBGTEFHXzEgKEZPUkNFRF9GTEFHPDwzKQorI2RlZmluZSBGTEFHX0MgKEZPUkNFRF9GTEFHPDw0KQorI2RlZmluZSBGTEFHX2ggKEZPUkNFRF9GTEFHPDw1KQorI2RlZmluZSBGTEFHX0IgKEZPUkNFRF9GTEFHPDw2KQorI2RlZmluZSBGTEFHX3MgKEZPUkNFRF9GTEFHPDw3KQorI2RlZmluZSBGTEFHX3kgKEZPUkNFRF9GTEFHPDw4KQorI2RlZmluZSBGTEFHX24gKEZPUkNFRF9GTEFHPDw5KQorI2RlZmluZSBGTEFHX2MgKEZPUkNFRF9GTEFHPDwxMCkKKyNkZWZpbmUgRkxBR19yIChGT1JDRURfRkxBRzw8MTEpCisjZW5kaWYKKwogI2lmZGVmIEZPUl9yZWFkYWhlYWQKICNpZm5kZWYgVFQKICNkZWZpbmUgVFQgdGhpcy5yZWFkYWhlYWQKQEAgLTU2OTEsNiArNTc2NSwxMiBAQAogI2RlZmluZSBGTEFHX2YgKDE8PDIpCiAjZW5kaWYKIAorI2lmZGVmIEZPUl9zZXQKKyNpZm5kZWYgVFQKKyNkZWZpbmUgVFQgdGhpcy5zZXQKKyNlbmRpZgorI2VuZGlmCisKICNpZmRlZiBGT1Jfc2V0ZW5mb3JjZQogI2lmbmRlZiBUVAogI2RlZmluZSBUVCB0aGlzLnNldGVuZm9yY2UKQEAgLTYyNzUsNiArNjM1NSwxMiBAQAogI2RlZmluZSBGTEFHX28gKDE8PDYpCiAjZW5kaWYKIAorI2lmZGVmIEZPUl91bmljb2RlCisjaWZuZGVmIFRUCisjZGVmaW5lIFRUIHRoaXMudW5pY29kZQorI2VuZGlmCisjZW5kaWYKKwogI2lmZGVmIEZPUl91bmlxCiAjaWZuZGVmIFRUCiAjZGVmaW5lIFRUIHRoaXMudW5pcQpkaWZmIC0tZ2l0IGEvYW5kcm9pZC9tYWMvZ2VuZXJhdGVkL2dsb2JhbHMuaCBiL2FuZHJvaWQvbWFjL2dlbmVyYXRlZC9nbG9iYWxzLmgKaW5kZXggOTAwNWNlYS4uODc2ZTQ2OCAxMDA2NDQKLS0tIGEvYW5kcm9pZC9tYWMvZ2VuZXJhdGVkL2dsb2JhbHMuaAorKysgYi9hbmRyb2lkL21hYy9nZW5lcmF0ZWQvZ2xvYmFscy5oCkBAIC0xMjQsNyArMTI0LDcgQEAKIHN0cnVjdCBzZXFfZGF0YSB7CiAgIGNoYXIgKnMsICpmOwogCi0gIGludCBwcmVjaXNpb247CisgIGludCBwcmVjaXNpb24sIGJ1ZmxlbjsKIH07CiAKIC8vIHRveXMvbHNiL3N1LmMKQEAgLTE2MSw4ICsxNjEsOCBAQAogc3RydWN0IG1pY3JvY29tX2RhdGEgewogICBsb25nIHM7CiAKLSAgaW50IGZkOwotICBzdHJ1Y3QgdGVybWlvcyBvcmlnaW5hbF9zdGRpbl9zdGF0ZSwgb3JpZ2luYWxfZmRfc3RhdGU7CisgIGludCBmZCwgc3RvazsKKyAgc3RydWN0IHRlcm1pb3Mgb2xkX3N0ZGluLCBvbGRfZmQ7CiB9OwogCiAvLyB0b3lzL25ldC9uZXRjYXQuYwpAQCAtMjE0LDggKzIxNCw5IEBACiAKIHN0cnVjdCBiYXNlNjRfZGF0YSB7CiAgIGxvbmcgdzsKLQogICB1bnNpZ25lZCB0b3RhbDsKKyAgdW5zaWduZWQgbjsgIC8vIG51bWJlciBvZiBiaXRzIHVzZWQgaW4gZW5jb2RpbmcuIDUgZm9yIGJhc2UzMiwgNiBmb3IgYmFzZTY0CisgIHVuc2lnbmVkIGFsaWduOyAgLy8gbnVtYmVyIG9mIGJpdHMgdG8gYWxpZ24gdG8KIH07CiAKIC8vIHRveXMvb3RoZXIvYmxrZGlzY2FyZC5jCkBAIC0zNzksNiArMzgwLDEyIEBACiAgIGNoYXIgKmM7CiB9OwogCisvLyB0b3lzL290aGVyL3B3Z2VuLmMKKworc3RydWN0IHB3Z2VuX2RhdGEgeworICBjaGFyICpyOworfTsKKwogLy8gdG95cy9vdGhlci9ydGN3YWtlLmMKIAogc3RydWN0IHJ0Y3dha2VfZGF0YSB7CkBAIC04NDEsMTEgKzg0OCwxMCBAQAogICAgIH0gZXhlYzsKICAgfTsKIAotICAvLyBrZWVwIGxpbmVubyBoZXJlOiB1c2VkIHRvIHdvcmsgYXJvdW5kIGNvbXBpbGVyIGxpbWl0YXRpb24gaW4gcnVuX2NvbW1hbmQoKQotICBsb25nIGxpbmVubzsKKyAgLy8ga2VlcCBpZnMgaGVyZTogdXNlZCB0byB3b3JrIGFyb3VuZCBjb21waWxlciBsaW1pdGF0aW9uIGluIHJ1bl9jb21tYW5kKCkKICAgY2hhciAqaWZzLCAqaXNleGVjLCAqd2NwYXQ7Ci0gIHVuc2lnbmVkIG9wdGlvbnMsIGpvYmNudDsKLSAgaW50IGhmZCwgcGlkLCBiYW5ncGlkLCB2YXJzbGVuLCBzaGlmdCwgY2Rjb3VudDsKKyAgdW5zaWduZWQgb3B0aW9ucywgam9iY250LCBMSU5FTk87CisgIGludCBoZmQsIHBpZCwgYmFuZ3BpZCwgdmFyc2xlbiwgY2Rjb3VudDsKICAgbG9uZyBsb25nIFNFQ09ORFM7CiAKICAgLy8gZ2xvYmFsIGFuZCBsb2NhbCB2YXJpYWJsZXMKQEAgLTg1Nyw4ICs4NjMsOSBAQAogICAvLyBQYXJzZWQgZnVuY3Rpb25zCiAgIHN0cnVjdCBzaF9mdW5jdGlvbiB7CiAgICAgY2hhciAqbmFtZTsKLSAgICBzdHJ1Y3Qgc2hfcGlwZWxpbmUgeyAgLy8gcGlwZWxpbmUgc2VnbWVudHMKKyAgICBzdHJ1Y3Qgc2hfcGlwZWxpbmUgeyAgLy8gcGlwZWxpbmUgc2VnbWVudHM6IGxpbmtlZCBsaXN0IG9mIGFyZyB3L21ldGFkYXRhCiAgICAgICBzdHJ1Y3Qgc2hfcGlwZWxpbmUgKm5leHQsICpwcmV2LCAqZW5kOworICAgICAgdW5zaWduZWQgbGluZW5vOwogICAgICAgaW50IGNvdW50LCBoZXJlLCB0eXBlOyAvLyBUT0RPIGFidXNlIHR5cGUgdG8gcmVwbGFjZSBjb3VudCBkdXJpbmcgcGFyc2luZwogICAgICAgc3RydWN0IHNoX2FyZyB7CiAgICAgICAgIGNoYXIgKip2OwpAQCAtODc4LDggKzg4NSwxNyBAQAogICAgIHN0cnVjdCBzaF9hcmcgKnJhdywgYXJnOwogICB9ICpwcDsgLy8gY3VycmVudGx5IHJ1bm5pbmcgcHJvY2VzcwogCisgIHN0cnVjdCBzaF9jYWxsc3RhY2sgeworICAgIHN0cnVjdCBzaF9jYWxsc3RhY2sgKm5leHQ7CisgICAgc3RydWN0IHNoX2Z1bmN0aW9uIHNjcmF0Y2g7CisgICAgc3RydWN0IHNoX2FyZyBhcmc7CisgICAgc3RydWN0IGFyZ19saXN0ICpkZWxldGU7CisgICAgdW5zaWduZWQgbGluZW5vOworICAgIGxvbmcgc2hpZnQ7CisgIH0gKmNjOworCiAgIC8vIGpvYiBsaXN0LCBjb21tYW5kIGxpbmUgZm9yICQqLCBzY3JhdGNoIHNwYWNlIGZvciBkb193aWxkY2FyZF9maWxlcygpCi0gIHN0cnVjdCBzaF9hcmcgam9icywgKmFyZywgKndjZGVjazsKKyAgc3RydWN0IHNoX2FyZyBqb2JzLCAqd2NkZWNrOwogfTsKIAogLy8gdG95cy9wZW5kaW5nL3N0dHkuYwpAQCAtMTQ5Miw2ICsxNTA4LDcgQEAKIAogc3RydWN0IHRlZV9kYXRhIHsKICAgdm9pZCAqb3V0cHV0czsKKyAgaW50IG91dDsKIH07CiAKIC8vIHRveXMvcG9zaXgvdG91Y2guYwpAQCAtMTU4Nyw2ICsxNjA0LDcgQEAKIAlzdHJ1Y3QgbW9kaW5mb19kYXRhIG1vZGluZm87CiAJc3RydWN0IG5zZW50ZXJfZGF0YSBuc2VudGVyOwogCXN0cnVjdCBvbmVpdF9kYXRhIG9uZWl0OworCXN0cnVjdCBwd2dlbl9kYXRhIHB3Z2VuOwogCXN0cnVjdCBydGN3YWtlX2RhdGEgcnRjd2FrZTsKIAlzdHJ1Y3Qgc2V0ZmF0dHJfZGF0YSBzZXRmYXR0cjsKIAlzdHJ1Y3Qgc2hhM3N1bV9kYXRhIHNoYTNzdW07CmRpZmYgLS1naXQgYS9hbmRyb2lkL21hYy9nZW5lcmF0ZWQvaGVscC5oIGIvYW5kcm9pZC9tYWMvZ2VuZXJhdGVkL2hlbHAuaAppbmRleCBiY2MxZjc3Li5kZmU0YTQwIDEwMDY0NAotLS0gYS9hbmRyb2lkL21hYy9nZW5lcmF0ZWQvaGVscC5oCisrKyBiL2FuZHJvaWQvbWFjL2dlbmVyYXRlZC9oZWxwLmgKQEAgLTEyLDggKzEyLDYgQEAKIAogI2RlZmluZSBIRUxQX3RveWJveF9mcmVlICJXaGVuIGEgcHJvZ3JhbSBleGl0cywgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCBjbGVhbiB1cCBhZnRlciBpdFxuKGZyZWUgbWVtb3J5LCBjbG9zZSBmaWxlcywgZXRjKS4gVG8gc2F2ZSBzaXplLCB0b3lib3ggdXN1YWxseSByZWxpZXNcbm9uIHRoaXMgYmVoYXZpb3IuIElmIHlvdSdyZSBydW5uaW5nIHRveWJveCB1bmRlciBhIGRlYnVnZ2VyIG9yXG53aXRob3V0IGEgcmVhbCBPUyAoYWxhIG5ld2xpYitsaWJnbG9zcyksIGVuYWJsZSB0aGlzIHRvIG1ha2UgdG95Ym94XG5jbGVhbiB1cCBhZnRlciBpdHNlbGYuIgogCi0jZGVmaW5lIEhFTFBfdG95Ym94X2kxOG4gIlN1cHBvcnQgZm9yIFVURi04IGNoYXJhY3RlciBzZXRzLCBhbmQgc29tZSBsb2NhbGUgc3VwcG9ydC4iCi0KICNkZWZpbmUgSEVMUF90b3lib3hfaGVscF9kYXNoZGFzaCAiU3VwcG9ydCAtLWhlbHAgYXJndW1lbnQgaW4gYWxsIGNvbW1hbmRzLCBldmVuIG9uZXMgd2l0aCBhIE5VTExcbm9wdHN0cmluZy4gKFVzZSBUT1lGTEFHX05PSEVMUCB0byBkaXNhYmxlLikgUHJvZHVjZXMgdGhlIHNhbWUgb3V0cHV0XG5hcyBcImhlbHAgY29tbWFuZFwiLiAtLXZlcnNpb24gc2hvd3MgdG95Ym94IHZlcnNpb24uIgogCiAjZGVmaW5lIEhFTFBfdG95Ym94X2hlbHAgIkluY2x1ZGUgaGVscCB0ZXh0IGZvciBlYWNoIGNvbW1hbmQuIgpAQCAtMjAyLDYgKzIwMCw4IEBACiAKICNkZWZpbmUgSEVMUF9yZWFkYWhlYWQgInVzYWdlOiByZWFkYWhlYWQgRklMRS4uLlxuXG5QcmVsb2FkIGZpbGVzIGludG8gZGlzayBjYWNoZS4iCiAKKyNkZWZpbmUgSEVMUF9wd2dlbiAidXNhZ2U6IHB3Z2VuIFstY0FuMHlyc0JoQzF2XSBbTEVOR1RIXSBbQ09VTlRdXG5cbkdlbmVyYXRlIGh1bWFuLXJlYWRhYmxlIHJhbmRvbSBwYXNzd29yZHMuIFdoZW4gb3V0cHV0IGlzIHRvIHR0eSBwcm9kdWNlc1xuYSBzY3JlZW5mdWxsIHRvIGRlZmVhdCBzaG91bGRlciBzdXJmaW5nIChwaWNrIG9uZSBhbmQgY2xlYXIgdGhlIHNjcmVlbikuXG5cbi1jICAtLWNhcGl0YWxpemUgICAgICAgICAgICAgICAgICBQZXJtaXQgY2FwaXRhbCBsZXR0ZXJzLlxuLUEgIC0tbm8tY2FwaXRhbGl6ZSAgICAgICAgICAgICAgIERvbid0IGluY2x1ZGUgY2FwaXRhbCBsZXR0ZXJzLlxuLW4gIC0tbnVtZXJhbHMgICAgICAgICAgICAgICAgICAgIFBlcm1pdCBudW1iZXJzLlxuLTAgIC0tbm8tbnVtZXJhbHMgICAgICAgICAgICAgICAgIERvbid0IGluY2x1ZGUgbnVtYmVycy5cbi15ICAtLXN5bWJvbHMgICAgICAgICAgICAgICAgICAgICBQZXJtaXQgc3BlY2lhbCBjaGFyYWN0ZXJzICgkIyUuLi4pLlxuLXIgPGNoYXJzPiAgLS1yZW1vdmU9PGNoYXJzPiAgICAgIERvbid0IGluY2x1ZGUgdGhlIGdpdmVuIGNoYXJhY3RlcnMuXG4tcyAgLS1zZWN1cmUgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgbW9yZSByYW5kb20gcGFzc3dvcmRzLlxuLUIgIC0tYW1iaWd1b3VzICAgICAgICAgICAgICAgICAgIEF2b2lkIGFtYmlndW91cyBjaGFyYWN0ZXJzIChlLmcuIDAsIE8pLlxuLWggIC0taGVscCAgICAgICAgICAgICAgICAgICAgICAgIFByaW50IHRoaXMgaGVscCBtZXNzYWdlLlxuLUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW50IHRoZSBvdXRwdXQgaW4gY29sdW1ucy5cbi0xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmludCB0aGUgb3V0cHV0IG9uZSBsaW5lIGVhY2guXG4tdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgaW5jbHVkZSB2b3dlbHMuIgorCiAjZGVmaW5lIEhFTFBfcHdkeCAidXNhZ2U6IHB3ZHggUElELi4uXG5cblByaW50IHdvcmtpbmcgZGlyZWN0b3J5IG9mIHByb2Nlc3NlcyBsaXN0ZWQgb24gY29tbWFuZCBsaW5lLiIKIAogI2RlZmluZSBIRUxQX3ByaW50ZW52ICJ1c2FnZTogcHJpbnRlbnYgWy0wXSBbZW52X3Zhci4uLl1cblxuUHJpbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuXG4tMAlVc2UgXFwwIGFzIGRlbGltaXRlciBpbnN0ZWFkIG9mIFxcbiIKQEAgLTMyMCw2ICszMjAsOCBAQAogCiAjZGVmaW5lIEhFTFBfYmxrZGlzY2FyZCAidXNhZ2U6IGJsa2Rpc2NhcmQgWy1vbHN6Zl0gREVWSUNFXG5cbkRpc2NhcmQgZGV2aWNlIHNlY3RvcnMuXG5cbi1vLCAtLW9mZnNldCBPRkYJQnl0ZSBvZmZzZXQgdG8gc3RhcnQgZGlzY2FyZGluZyBhdCAoZGVmYXVsdCAwKVxuLWwsIC0tbGVuZ3RoIExFTglCeXRlcyB0byBkaXNjYXJkIChkZWZhdWx0IGFsbClcbi1zLCAtLXNlY3VyZQkJUGVyZm9ybSBzZWN1cmUgZGlzY2FyZFxuLXosIC0temVyb291dAkJWmVyby1maWxsIHJhdGhlciB0aGFuIGRpc2NhcmRcbi1mLCAtLWZvcmNlCQlEaXNhYmxlIGNoZWNrIGZvciBtb3VudGVkIGZpbGVzeXN0ZW1cblxuT0ZGIGFuZCBMRU4gbXVzdCBiZSBhbGlnbmVkIHRvIHRoZSBkZXZpY2Ugc2VjdG9yIHNpemUuXG5CeSBkZWZhdWx0IGVudGlyZSBkZXZpY2UgaXMgZGlzY2FyZGVkLlxuV0FSTklORzogQWxsIGRpc2NhcmRlZCBkYXRhIGlzIHBlcm1hbmVudGx5IGxvc3QhIgogCisjZGVmaW5lIEhFTFBfYmFzZTMyICJ1c2FnZTogYmFzZTMyIFstZGldIFstdyBDT0xVTU5TXSBbRklMRS4uLl1cblxuRW5jb2RlIG9yIGRlY29kZSBpbiBiYXNlMzIuXG5cbi1kCURlY29kZVxuLWkJSWdub3JlIG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnNcbi13CVdyYXAgb3V0cHV0IGF0IENPTFVNTlMgKGRlZmF1bHQgNzYgb3IgMCBmb3Igbm8gd3JhcCkiCisKICNkZWZpbmUgSEVMUF9iYXNlNjQgInVzYWdlOiBiYXNlNjQgWy1kaV0gWy13IENPTFVNTlNdIFtGSUxFLi4uXVxuXG5FbmNvZGUgb3IgZGVjb2RlIGluIGJhc2U2NC5cblxuLWQJRGVjb2RlXG4taQlJZ25vcmUgbm9uLWFscGhhYmV0aWMgY2hhcmFjdGVyc1xuLXcJV3JhcCBvdXRwdXQgYXQgQ09MVU1OUyAoZGVmYXVsdCA3NiBvciAwIGZvciBubyB3cmFwKSIKIAogI2RlZmluZSBIRUxQX2FzY2lpICJ1c2FnZTogYXNjaWlcblxuRGlzcGxheSBhc2NpaSBjaGFyYWN0ZXIgc2V0LiIKQEAgLTMzNiw2ICszMzgsOCBAQAogCiAjZGVmaW5lIEhFTFBfdXNlcmFkZCAidXNhZ2U6IHVzZXJhZGQgWy1TREhdIFstaCBESVJdIFstcyBTSEVMTF0gWy1HIEdSUF0gWy1nIE5BTUVdIFstdSBVSURdIFVTRVIgW0dST1VQXVxuXG5DcmVhdGUgbmV3IHVzZXIsIG9yIGFkZCBVU0VSIHRvIEdST1VQXG5cbi1EICAgICAgIERvbid0IGFzc2lnbiBhIHBhc3N3b3JkXG4tZyBOQU1FICBSZWFsIG5hbWVcbi1HIEdSUCAgIEFkZCB1c2VyIHRvIGV4aXN0aW5nIGdyb3VwXG4taCBESVIgICBIb21lIGRpcmVjdG9yeVxuLUggICAgICAgRG9uJ3QgY3JlYXRlIGhvbWUgZGlyZWN0b3J5XG4tcyBTSEVMTCBMb2dpbiBzaGVsbFxuLVMgICAgICAgQ3JlYXRlIGEgc3lzdGVtIHVzZXJcbi11IFVJRCAgIFVzZXIgaWQiCiAKKyNkZWZpbmUgSEVMUF91bmljb2RlICJ1c2FnZTogdW5pY29kZSBbW21pbl0tbWF4XVxuXG5Db252ZXJ0IGJldHdlZW4gVW5pY29kZSBjb2RlIHBvaW50cyBhbmQgVVRGLTgsIGluIGJvdGggZGlyZWN0aW9ucy4iCisKICNkZWZpbmUgSEVMUF90cmFjZXJvdXRlICJ1c2FnZTogdHJhY2Vyb3V0ZSBbLTQ2RlVJbGRudnJdIFstZiAxU1RfVFRMXSBbLW0gTUFYVFRMXSBbLXAgUE9SVF0gWy1xIFBST0JFU11cblstcyBTUkNfSVBdIFstdCBUT1NdIFstdyBXQUlUX1NFQ10gWy1nIEdBVEVXQVldIFstaSBJRkFDRV0gWy16IFBBVVNFX01TRUNdIEhPU1QgW0JZVEVTXVxuXG50cmFjZXJvdXRlNiBbLWRucnZdIFstbSBNQVhUVExdIFstcCBQT1JUXSBbLXEgUFJPQkVTXVstcyBTUkNfSVBdIFstdCBUT1NdIFstdyBXQUlUX1NFQ11cbiAgWy1pIElGQUNFXSBIT1NUIFtCWVRFU11cblxuVHJhY2UgdGhlIHJvdXRlIHRvIEhPU1RcblxuLTQsLTYgRm9yY2UgSVAgb3IgSVB2NiBuYW1lIHJlc29sdXRpb25cbi1GICAgIFNldCB0aGUgZG9uJ3QgZnJhZ21lbnQgYml0IChzdXBwb3J0cyBJUFY0IG9ubHkpXG4tVSAgICBVc2UgVURQIGRhdGFncmFtcyBpbnN0ZWFkIG9mIElDTVAgRUNITyAoc3VwcG9ydHMgSVBWNCBvbmx5KVxuLUkgICAgVXNlIElDTVAgRUNITyBpbnN0ZWFkIG9mIFVEUCBkYXRhZ3JhbXMgKHN1cHBvcnRzIElQVjQgb25seSlcbi1sICAgIERpc3BsYXkgdGhlIFRUTCB2YWx1ZSBvZiB0aGUgcmV0dXJuZWQgcGFja2V0IChzdXBwb3J0cyBJUFY0IG9ubHkpXG4tZCAgICBTZXQgU09fREVCVUcgb3B0aW9ucyB0byBzb2NrZXRcbi1uICAgIFByaW50IG51bWVyaWMgYWRkcmVzc2VzXG4tdiAgICB2ZXJib3NlXG4tciAgICBCeXBhc3Mgcm91dGluZyB0YWJsZXMsIHNlbmQgZGlyZWN0bHkgdG8gSE9TVFxuLW0gICAgTWF4IHRpbWUtdG8tbGl2ZSAobWF4IG51bWJlciBvZiBob3BzKShSQU5HRSAxIHRvIDI1NSlcbi1wICAgIEJhc2UgVURQIHBvcnQgbnVtYmVyIHVzZWQgaW4gcHJvYmVzKGRlZmF1bHQgMzM0MzQpKFJBTkdFIDEgdG8gNjU1MzUpXG4tcSAgICBOdW1iZXIgb2YgcHJvYmVzIHBlciBUVEwgKGRlZmF1bHQgMykoUkFOR0UgMSB0byAyNTUpXG4tcyAgICBJUCBhZGRyZXNzIHRvIHVzZSBhcyB0aGUgc291cmNlIGFkZHJlc3Ncbi10ICAgIFR5cGUtb2Ytc2VydmljZSBpbiBwcm9iZSBwYWNrZXRzIChkZWZhdWx0IDApKFJBTkdFIDAgdG8gMjU1KVxuLXcgICAgVGltZSBpbiBzZWNvbmRzIHRvIHdhaXQgZm9yIGEgcmVzcG9uc2UgKGRlZmF1bHQgMykoUkFOR0UgMCB0byA4NjQwMClcbi1nICAgIExvb3NlIHNvdXJjZSByb3V0ZSBnYXRld2F5ICg4IG1heCkgKHN1cHBvcnRzIElQVjQgb25seSlcbi16ICAgIFBhdXNlIFRpbWUgaW4gbXMgKGRlZmF1bHQgMCkoUkFOR0UgMCB0byA4NjQwMCkgKHN1cHBvcnRzIElQVjQgb25seSlcbi1mICAgIFN0YXJ0IGZyb20gdGhlIDFTVF9UVEwgaG9wIChpbnN0ZWFkIGZyb20gMSkoUkFOR0UgMSB0byAyNTUpIChzdXBwb3J0cyBJUFY0IG9ubHkpXG4taSAgICBTcGVjaWZ5IGEgbmV0d29yayBpbnRlcmZhY2UgdG8gb3BlcmF0ZSB3aXRoIgogCiAjZGVmaW5lIEhFTFBfdHIgInVzYWdlOiB0ciBbLWNkc10gU0VUMSBbU0VUMl1cblxuVHJhbnNsYXRlLCBzcXVlZXplLCBvciBkZWxldGUgY2hhcmFjdGVycyBmcm9tIHN0ZGluLCB3cml0aW5nIHRvIHN0ZG91dFxuXG4tYy8tQyAgVGFrZSBjb21wbGVtZW50IG9mIFNFVDFcbi1kICAgICBEZWxldGUgaW5wdXQgY2hhcmFjdGVycyBjb2RlZCBTRVQxXG4tcyAgICAgU3F1ZWV6ZSBtdWx0aXBsZSBvdXRwdXQgY2hhcmFjdGVycyBvZiBTRVQyIGludG8gb25lIGNoYXJhY3RlciIKQEAgLTM3MCw2ICszNzQsOCBAQAogCiAjZGVmaW5lIEhFTFBfdW5zZXQgInVzYWdlOiB1bnNldCBbLWZ2bl0gTkFNRS4uLlxuXG4tZglOQU1FIGlzIGEgZnVuY3Rpb25cbi12CU5BTUUgaXMgYSB2YXJpYWJsZVxuLW4JZGVyZWZlcmVuY2UgTkFNRSBhbmQgdW5zZXQgdGhhdCIKIAorI2RlZmluZSBIRUxQX3NldCAidXNhZ2U6IHNldCBbK2FdIFsrbyBPUFRJT05dIFtWQVIuLi5dXG5cblNldCB2YXJpYWJsZXMgYW5kIHNoZWxsIGF0dHJpYnV0ZXMuIFVzZSArIHRvIGRpc2FibGUgYW5kIC0gdG8gZW5hYmxlLlxuTkFNRT1WQUxVRSBhcmd1bWVudHMgYXNzaWduIHRvIHRoZSB2YXJpYWJsZSwgYW55IGxlZnRvdmVycyBzZXQgJDEsICQyLi4uXG5XaXRoIG5vIGFyZ3VtZW50cywgcHJpbnRzIGN1cnJlbnQgdmFyaWFibGVzLlxuXG4tZglOQU1FIGlzIGEgZnVuY3Rpb25cbi12CU5BTUUgaXMgYSB2YXJpYWJsZVxuLW4JZGVyZWZlcmVuY2UgTkFNRSBhbmQgdW5zZXQgdGhhdFxuXG5PUFRJT05zOlxuICBoaXN0b3J5IC0gZW5hYmxlIGNvbW1hbmQgaGlzdG9yeSIKKwogI2RlZmluZSBIRUxQX2V4aXQgInVzYWdlOiBleGl0IFtzdGF0dXNdXG5cbkV4aXQgc2hlbGwuICBJZiBubyByZXR1cm4gdmFsdWUgc3VwcGxpZWQgb24gY29tbWFuZCBsaW5lLCB1c2UgdmFsdWVcbm9mIG1vc3QgcmVjZW50IGNvbW1hbmQsIG9yIDAgaWYgbm9uZS4iCiAKICNkZWZpbmUgSEVMUF9jZCAidXNhZ2U6IGNkIFstUExdIFtwYXRoXVxuXG5DaGFuZ2UgY3VycmVudCBkaXJlY3RvcnkuICBXaXRoIG5vIGFyZ3VtZW50cywgZ28gJEhPTUUuXG5cbi1QCVBoeXNpY2FsIHBhdGg6IHJlc29sdmUgc3ltbGlua3MgaW4gcGF0aFxuLUwJTG9jYWwgcGF0aDogLi4gdHJpbXMgZGlyZWN0b3JpZXMgb2ZmICRQV0QgKGRlZmF1bHQpIgpAQCAtNDkyLDcgKzQ5OCw3IEBACiAKICNkZWZpbmUgSEVMUF90aW1lICJ1c2FnZTogdGltZSBbLXB2XSBDT01NQU5ELi4uXG5cblJ1biBjb21tYW5kIGxpbmUgYW5kIHJlcG9ydCByZWFsLCB1c2VyLCBhbmQgc3lzdGVtIHRpbWUgZWxhcHNlZCBpbiBzZWNvbmRzLlxuKHJlYWwgPSBjbG9jayBvbiB0aGUgd2FsbCwgdXNlciA9IGNwdSB1c2VkIGJ5IGNvbW1hbmQncyBjb2RlLFxuc3lzdGVtID0gY3B1IHVzZWQgYnkgT1Mgb24gYmVoYWxmIG9mIGNvbW1hbmQuKVxuXG4tcAlQT1NJWCBmb3JtYXQgb3V0cHV0IChkZWZhdWx0KVxuLXYJVmVyYm9zZSIKIAotI2RlZmluZSBIRUxQX3Rlc3QgInVzYWdlOiB0ZXN0IFstYmNkZWZnaExQclNzdXd4IFBBVEhdIFstbnogU1RSSU5HXSBbLXQgRkRdIFtYID8/IFldXG5cblJldHVybiB0cnVlIG9yIGZhbHNlIGJ5IHBlcmZvcm1pbmcgdGVzdHMuIChXaXRoIG5vIGFyZ3VtZW50cyByZXR1cm4gZmFsc2UuKVxuXG4tLS0gVGVzdHMgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCAoYWZ0ZXIgdGhlIG9wdGlvbik6XG5QQVRIIGlzL2hhczpcbiAgLWIgIGJsb2NrIGRldmljZSAgIC1mICByZWd1bGFyIGZpbGUgICAtcCAgZmlmbyAgICAgICAgICAgLXUgIHNldHVpZCBiaXRcbiAgLWMgIGNoYXIgZGV2aWNlICAgIC1nICBzZXRnaWQgICAgICAgICAtciAgcmVhZCBiaXQgICAgICAgLXcgIHdyaXRlIGJpdFxuICAtZCAgZGlyZWN0b3J5ICAgICAgLWggIHN5bWxpbmsgICAgICAgIC1TICBzb2NrZXQgICAgICAgICAteCAgZXhlY3V0ZSBiaXRcbiAgLWUgIGV4aXN0cyAgICAgICAgIC1MICBzeW1saW5rICAgICAgICAtcyAgbm9uemVybyBzaXplXG5TVFJJTkcgaXM6XG4gIC1uICBub256ZXJvIHNpemUgICAteiAgemVybyBzaXplICAgICAgKFNUUklORyBieSBpdHNlbGYgaW1wbGllcyAtbilcbkZEIChpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvcikgaXM6XG4gIC10ICBhIFRUWVxuXG4tLS0gVGVzdHMgd2l0aCBvbmUgYXJndW1lbnQgb24gZWFjaCBzaWRlIG9mIGFuIG9wZXJhdG9yOlxuVHdvIHN0cmluZ3M6XG4gID0gIGFyZSBpZGVudGljYWwgICAhPSAgZGlmZmVyXG5Ud28gaW50ZWdlcnM6XG4gIC1lcSAgZXF1YWwgICAgICAgICAtZ3QgIGZpcnN0ID4gc2Vjb25kICAgIC1sdCAgZmlyc3QgPCBzZWNvbmRcbiAgLW5lICBub3QgZXF1YWwgICAgIC1nZSAgZmlyc3QgPj0gc2Vjb25kICAgLWxlICBmaXJzdCA8PSBzZWNvbmRcblxuLS0tIE1vZGlmeSBvciBjb21iaW5lIHRlc3RzOlxuICAhIEVYUFIgICAgIG5vdCAoc3dhcCB0cnVlL2ZhbHNlKSAgIEVYUFIgLWEgRVhQUiAgICBhbmQgKGFyZSBib3RoIHRydWUpXG4gICggRVhQUiApICAgZXZhbHVhdGUgdGhpcyBmaXJzdCAgICAgRVhQUiAtbyBFWFBSICAgIG9yIChpcyBlaXRoZXIgdHJ1ZSkiCisjZGVmaW5lIEhFTFBfdGVzdCAidXNhZ2U6IHRlc3QgWy1iY2RlZmdoTFByU3N1d3ggUEFUSF0gWy1ueiBTVFJJTkddIFstdCBGRF0gW1ggPz8gWV1cblxuUmV0dXJuIHRydWUgb3IgZmFsc2UgYnkgcGVyZm9ybWluZyB0ZXN0cy4gKFdpdGggbm8gYXJndW1lbnRzIHJldHVybiBmYWxzZS4pXG5cbi0tLSBUZXN0cyB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IChhZnRlciB0aGUgb3B0aW9uKTpcblBBVEggaXMvaGFzOlxuICAtYiAgYmxvY2sgZGV2aWNlICAgLWYgIHJlZ3VsYXIgZmlsZSAgIC1wICBmaWZvICAgICAgICAgICAtdSAgc2V0dWlkIGJpdFxuICAtYyAgY2hhciBkZXZpY2UgICAgLWcgIHNldGdpZCAgICAgICAgIC1yICByZWFkIGJpdCAgICAgICAtdyAgd3JpdGUgYml0XG4gIC1kICBkaXJlY3RvcnkgICAgICAtaCAgc3ltbGluayAgICAgICAgLVMgIHNvY2tldCAgICAgICAgIC14ICBleGVjdXRlIGJpdFxuICAtZSAgZXhpc3RzICAgICAgICAgLUwgIHN5bWxpbmsgICAgICAgIC1zICBub256ZXJvIHNpemUgICAtayAgc3RpY2t5IGJpdFxuU1RSSU5HIGlzOlxuICAtbiAgbm9uemVybyBzaXplICAgLXogIHplcm8gc2l6ZSAgICAgIChTVFJJTkcgYnkgaXRzZWxmIGltcGxpZXMgLW4pXG5GRCAoaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IpIGlzOlxuICAtdCAgYSBUVFlcblxuLS0tIFRlc3RzIHdpdGggb25lIGFyZ3VtZW50IG9uIGVhY2ggc2lkZSBvZiBhbiBvcGVyYXRvcjpcblR3byBzdHJpbmdzOlxuICA9ICBhcmUgaWRlbnRpY2FsICAgIT0gIGRpZmZlclxuVHdvIGludGVnZXJzOlxuICAtZXEgIGVxdWFsICAgICAgICAgLWd0ICBmaXJzdCA+IHNlY29uZCAgICAtbHQgIGZpcnN0IDwgc2Vjb25kXG4gIC1uZSAgbm90IGVxdWFsICAgICAtZ2UgIGZpcnN0ID49IHNlY29uZCAgIC1sZSAgZmlyc3QgPD0gc2Vjb25kXG5cbi0tLSBNb2RpZnkgb3IgY29tYmluZSB0ZXN0czpcbiAgISBFWFBSICAgICBub3QgKHN3YXAgdHJ1ZS9mYWxzZSkgICBFWFBSIC1hIEVYUFIgICAgYW5kIChhcmUgYm90aCB0cnVlKVxuICAoIEVYUFIgKSAgIGV2YWx1YXRlIHRoaXMgZmlyc3QgICAgIEVYUFIgLW8gRVhQUiAgICBvciAoaXMgZWl0aGVyIHRydWUpIgogCiAjZGVmaW5lIEhFTFBfdGVlICJ1c2FnZTogdGVlIFstYWldIFtGSUxFLi4uXVxuXG5Db3B5IHN0ZGluIHRvIGVhY2ggbGlzdGVkIGZpbGUsIGFuZCBhbHNvIHRvIHN0ZG91dC5cbkZpbGVuYW1lIFwiLVwiIGlzIGEgc3lub255bSBmb3Igc3Rkb3V0LlxuXG4tYQlBcHBlbmQgdG8gZmlsZXNcbi1pCUlnbm9yZSBTSUdJTlQiCiAKQEAgLTYxOCw3ICs2MjQsNyBAQAogCiAjZGVmaW5lIEhFTFBfY2tzdW0gInVzYWdlOiBja3N1bSBbLUlQTE5dIFtGSUxFLi4uXVxuXG5Gb3IgZWFjaCBmaWxlLCBvdXRwdXQgY3JjMzIgY2hlY2tzdW0gdmFsdWUsIGxlbmd0aCBhbmQgbmFtZSBvZiBmaWxlLlxuSWYgbm8gZmlsZXMgbGlzdGVkLCBjb3B5IGZyb20gc3RkaW4uICBGaWxlbmFtZSBcIi1cIiBpcyBhIHN5bm9ueW0gZm9yIHN0ZGluLlxuXG4tSAlIZXhhZGVjaW1hbCBjaGVja3N1bSAoZGVmYXVsdHMgdG8gZGVjaW1hbClcbi1MCUxpdHRsZSBlbmRpYW4gKGRlZmF1bHRzIHRvIGJpZyBlbmRpYW4pXG4tUAlQcmUtaW52ZXJzaW9uXG4tSQlTa2lwIHBvc3QtaW52ZXJzaW9uXG4tTglEbyBub3QgaW5jbHVkZSBsZW5ndGggaW4gQ1JDIGNhbGN1bGF0aW9uIChvciBvdXRwdXQpIgogCi0jZGVmaW5lIEhFTFBfY2htb2QgInVzYWdlOiBjaG1vZCBbLVJdIE1PREUgRklMRS4uLlxuXG5DaGFuZ2UgbW9kZSBvZiBsaXN0ZWQgZmlsZVtzXSAocmVjdXJzaXZlbHkgd2l0aCAtUikuXG5cbk1PREUgY2FuIGJlIChjb21tYS1zZXBhcmF0ZWQpIHN0YW56YXM6IFt1Z29hXVsrLT1dW3J3eHN0WHVnb11cblxuU3RhbnphcyBhcmUgYXBwbGllZCBpbiBvcmRlcjogRm9yIGVhY2ggY2F0ZWdvcnkgKHUgPSB1c2VyLFxuZyA9IGdyb3VwLCBvID0gb3RoZXIsIGEgPSBhbGwgdGhyZWUsIGlmIG5vbmUgc3BlY2lmaWVkIGRlZmF1bHQgaXMgYSksXG5zZXQgKCspLCBjbGVhciAoLSksIG9yIGNvcHkgKD0pLCByID0gcmVhZCwgdyA9IHdyaXRlLCB4ID0gZXhlY3V0ZS5cbnMgPSB1K3MgPSBzdWlkLCBnK3MgPSBzZ2lkLCBvK3MgPSBzdGlja3kuICgrdCBpcyBhbiBhbGlhcyBmb3IgbytzKS5cbnN1aWQvc2dpZDogZXhlY3V0ZSBhcyB0aGUgdXNlci9ncm91cCB3aG8gb3ducyB0aGUgZmlsZS5cbnN0aWNreTogY2FuJ3QgZGVsZXRlIGZpbGVzIHlvdSBkb24ndCBvd24gb3V0IG9mIHRoaXMgZGlyZWN0b3J5XG5YID0geCBmb3IgZGlyZWN0b3JpZXMgb3IgaWYgYW55IGNhdGVnb3J5IGFscmVhZHkgaGFzIHggc2V0LlxuXG5PciBNT0RFIGNhbiBiZSBhbiBvY3RhbCB2YWx1ZSB1cCB0byA3Nzc3CXVnIHV1dWdnZ29vbwl0b3AgK1xuYml0IDEgPSBvK3gsIGJpdCAxPDw4ID0gdSt3LCAxPDwxMSA9IGcrMQlzc3Ryd3hyd3hyd3gJYm90dG9tXG5cbkV4YW1wbGVzOlxuY2htb2QgdSt3IGZpbGUgLSBhbGxvdyBvd25lciBvZiBcImZpbGVcIiB0byB3cml0ZSB0byBpdC5cbmNobW9kIDc0NCBmaWxlIC0gdXNlciBjYW4gcmVhZC93cml0ZS9leGVjdXRlLCBldmVyeW9uZSBlbHNlIHJlYWQgb25seSIKKyNkZWZpbmUgSEVMUF9jaG1vZCAidXNhZ2U6IGNobW9kIFstUl0gTU9ERSBGSUxFLi4uXG5cbkNoYW5nZSBtb2RlIG9mIGxpc3RlZCBmaWxlW3NdIChyZWN1cnNpdmVseSB3aXRoIC1SKS5cblxuTU9ERSBjYW4gYmUgKGNvbW1hLXNlcGFyYXRlZCkgc3RhbnphczogW3Vnb2FdWystPV1bcnd4c3RYdWdvXVxuXG5TdGFuemFzIGFyZSBhcHBsaWVkIGluIG9yZGVyOiBGb3IgZWFjaCBjYXRlZ29yeSAodSA9IHVzZXIsXG5nID0gZ3JvdXAsIG8gPSBvdGhlciwgYSA9IGFsbCB0aHJlZSwgaWYgbm9uZSBzcGVjaWZpZWQgZGVmYXVsdCBpcyBhKSxcbnNldCAoKyksIGNsZWFyICgtKSwgb3IgY29weSAoPSksIHIgPSByZWFkLCB3ID0gd3JpdGUsIHggPSBleGVjdXRlLlxucyA9IHUrcyA9IHN1aWQsIGcrcyA9IHNnaWQsICt0ID0gc3RpY2t5LiAobytzIGlnbm9yZWQgc28gYStzIGRvZXNuJ3Qgc2V0ICt0KVxuc3VpZC9zZ2lkOiBleGVjdXRlIGFzIHRoZSB1c2VyL2dyb3VwIHdobyBvd25zIHRoZSBmaWxlLlxuc3RpY2t5OiBjYW4ndCBkZWxldGUgZmlsZXMgeW91IGRvbid0IG93biBvdXQgb2YgdGhpcyBkaXJlY3RvcnlcblggPSB4IGZvciBkaXJlY3RvcmllcyBvciBpZiBhbnkgY2F0ZWdvcnkgYWxyZWFkeSBoYXMgeCBzZXQuXG5cbk9yIE1PREUgY2FuIGJlIGFuIG9jdGFsIHZhbHVlIHVwIHRvIDc3NzcJdWcgdXV1Z2dnb29vCXRvcCArXG5iaXQgMSA9IG8reCwgYml0IDE8PDggPSB1K3csIDE8PDExID0gZysxCXNzdHJ3eHJ3eHJ3eAlib3R0b21cblxuRXhhbXBsZXM6XG5jaG1vZCB1K3cgZmlsZSAtIGFsbG93IG93bmVyIG9mIFwiZmlsZVwiIHRvIHdyaXRlIHRvIGl0LlxuY2htb2QgNzQ0IGZpbGUgLSB1c2VyIGNhbiByZWFkL3dyaXRlL2V4ZWN1dGUsIGV2ZXJ5b25lIGVsc2UgcmVhZCBvbmx5IgogCiAjZGVmaW5lIEhFTFBfY2hvd24gInNlZTogY2hncnAiCiAKZGlmZiAtLWdpdCBhL2FuZHJvaWQvbWFjL2dlbmVyYXRlZC9uZXd0b3lzLmggYi9hbmRyb2lkL21hYy9nZW5lcmF0ZWQvbmV3dG95cy5oCmluZGV4IDFiODMyNGYuLjNlODZlNjUgMTAwNjQ0Ci0tLSBhL2FuZHJvaWQvbWFjL2dlbmVyYXRlZC9uZXd0b3lzLmgKKysrIGIvYW5kcm9pZC9tYWMvZ2VuZXJhdGVkL25ld3RveXMuaApAQCAtNCw3ICs0LDcgQEAKIFVTRV9TSChPTERUT1koLXRveXNoLCBzaCwgMCkpCiBVU0VfU0goT0xEVE9ZKC4sIHNvdXJjZSwgVE9ZRkxBR19OT0ZPUkspKQogVVNFX1RSVUUoT0xEVE9ZKDosIHRydWUsIFRPWUZMQUdfTk9GT1JLfFRPWUZMQUdfTk9IRUxQKSkKLVVTRV9URVNUKE9MRFRPWShbLCB0ZXN0LCBUT1lGTEFHX05PRk9SS3xUT1lGTEFHX05PSEVMUCkpCitVU0VfU0goT0xEVE9ZKFssIHRlc3QsIFRPWUZMQUdfTk9GT1JLfFRPWUZMQUdfTk9IRUxQKSkKIFVTRV9BQ1BJKE5FV1RPWShhY3BpLCAiYWJjdFYiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfR1JPVVBBREQoT0xEVE9ZKGFkZGdyb3VwLCBncm91cGFkZCwgVE9ZRkxBR19ORUVEUk9PVHxUT1lGTEFHX1NCSU4pKQogVVNFX1VTRVJBREQoT0xEVE9ZKGFkZHVzZXIsIHVzZXJhZGQsIFRPWUZMQUdfTkVFRFJPT1R8VE9ZRkxBR19VTUFTS3xUT1lGTEFHX1NCSU4pKQpAQCAtMTIsNiArMTIsNyBAQAogVVNFX0FSUChORVdUT1koYXJwLCAidmk6bkRzZGFwOkE6SDpbK0FwXVshc2RdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0FSUElORyhORVdUT1koYXJwaW5nLCAiPDE+MXM6STp3IzwwYyM8MEFVRGJxZlsrQVVdWytEZl0iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX1NCSU4pKQogVVNFX0FTQ0lJKE5FV1RPWShhc2NpaSwgMCwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQorVVNFX0JBU0UzMihORVdUT1koYmFzZTMyLCAiZGl3IzwwPTc2WyFkd10iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfQkFTRTY0KE5FV1RPWShiYXNlNjQsICJkaXcjPDA9NzZbIWR3XSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9CQVNFTkFNRShORVdUT1koYmFzZW5hbWUsICJePDFhczoiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfU0goT0xEVE9ZKGJhc2gsIHNoLCBUT1lGTEFHX0JJTikpCkBAIC02OCw3ICs2OSw3IEBACiBVU0VfRFUoTkVXVE9ZKGR1LCAiZCM8MD0tMWhtbGNhSGtLTHN4YlstSExdWy1rS21oXSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9EVU1QTEVBU0VTKE5FV1RPWShkdW1wbGVhc2VzLCAiPjBhcmY6WyFhcl0iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfRUNITyhORVdUT1koZWNobywgIl4/RWVuWy1lRV0iLCBUT1lGTEFHX0JJTnxUT1lGTEFHX01BWUZPUkspKQotVVNFX0VHUkVQKE9MRFRPWShlZ3JlcCwgZ3JlcCwgVE9ZRkxBR19CSU58VE9ZRkxBR19BUkdGQUlMKDIpKSkKK1VTRV9FR1JFUChPTERUT1koZWdyZXAsIGdyZXAsIFRPWUZMQUdfQklOfFRPWUZMQUdfQVJHRkFJTCgyKXxUT1lGTEFHX0xJTkVCVUYpKQogVVNFX0VKRUNUKE5FV1RPWShlamVjdCwgIj4xc3RUWyF0VF0iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfRU5WKE5FV1RPWShlbnYsICJeaTB1KiIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOfFRPWUZMQUdfQVJHRkFJTCgxMjUpKSkKIFVTRV9TSChORVdUT1koZXZhbCwgMCwgVE9ZRkxBR19OT0ZPUkspKQpAQCAtODEsNyArODIsNyBAQAogVVNFX0ZBTExPQ0FURShORVdUT1koZmFsbG9jYXRlLCAiPjFsI3xvIyIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9GQUxTRShORVdUT1koZmFsc2UsIE5VTEwsIFRPWUZMQUdfQklOfFRPWUZMQUdfTk9IRUxQfFRPWUZMQUdfTUFZRk9SSykpCiBVU0VfRkRJU0soTkVXVE9ZKGZkaXNrLCAiQyM8MEgjPDBTIzwwYiM8NTEydWwiLCBUT1lGTEFHX1NCSU4pKQotVVNFX0ZHUkVQKE9MRFRPWShmZ3JlcCwgZ3JlcCwgVE9ZRkxBR19CSU58VE9ZRkxBR19BUkdGQUlMKDIpKSkKK1VTRV9GR1JFUChPTERUT1koZmdyZXAsIGdyZXAsIFRPWUZMQUdfQklOfFRPWUZMQUdfQVJHRkFJTCgyKXxUT1lGTEFHX0xJTkVCVUYpKQogVVNFX0ZJTEUoTkVXVE9ZKGZpbGUsICI8MWJoTHNbIWhMXSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9GSU5EKE5FV1RPWShmaW5kLCAiP15ITFstSExdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX0ZMT0NLKE5FV1RPWShmbG9jaywgIjwxPjFuc3V4Wy1zdXhdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQpAQCAtMTAwLDcgKzEwMSw3IEBACiBVU0VfR0VURkFUVFIoTkVXVE9ZKGdldGZhdHRyLCAiKG9ubHktdmFsdWVzKWRobjoiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfR0VUT1BUKE5FV1RPWShnZXRvcHQsICJeYShhbHRlcm5hdGl2ZSluOihuYW1lKW86KG9wdGlvbnMpbCoobG9uZykobG9uZ29wdGlvbnMpVHUiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfR0VUVFkoTkVXVE9ZKGdldHR5LCAiPDJ0IzwwSDpJOmw6Zjppd25tTGgiLCBUT1lGTEFHX1NCSU4pKQotVVNFX0dSRVAoTkVXVE9ZKGdyZXAsICIobGluZS1idWZmZXJlZCkoY29sb3IpOjsoZXhjbHVkZS1kaXIpKlMoZXhjbHVkZSkqTShpbmNsdWRlKSpaekVGSElhYihieXRlLW9mZnNldCloKG5vLWZpbGVuYW1lKWlubyhvbmx5LW1hdGNoaW5nKXJSc3Z3Y2woZmlsZXMtd2l0aC1tYXRjaGVzKXEocXVpZXQpKHNpbGVudCllKmYqQyNCI0EjbSN4WyF3eF1bIUVGd10iLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMikpKQorVVNFX0dSRVAoTkVXVE9ZKGdyZXAsICIobGluZS1idWZmZXJlZCkoY29sb3IpOjsoZXhjbHVkZS1kaXIpKlMoZXhjbHVkZSkqTShpbmNsdWRlKSpaekVGSElhYihieXRlLW9mZnNldCloKG5vLWZpbGVuYW1lKWlubyhvbmx5LW1hdGNoaW5nKXJSc3Z3Y2woZmlsZXMtd2l0aC1tYXRjaGVzKXEocXVpZXQpKHNpbGVudCllKmYqQyNCI0EjbSN4WyF3eF1bIUVGd10iLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMil8VE9ZRkxBR19MSU5FQlVGKSkKIFVTRV9HUk9VUEFERChORVdUT1koZ3JvdXBhZGQsICI8MT4yZyM8MFMiLCBUT1lGTEFHX05FRURST09UfFRPWUZMQUdfU0JJTikpCiBVU0VfR1JPVVBERUwoTkVXVE9ZKGdyb3VwZGVsLCAiPDE+MiIsIFRPWUZMQUdfTkVFRFJPT1R8VE9ZRkxBR19TQklOKSkKIFVTRV9HUk9VUFMoTkVXVE9ZKGdyb3VwcywgTlVMTCwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQpAQCAtMjA4LDYgKzIwOSw3IEBACiBVU0VfUFMoTkVXVE9ZKHBzLCAiayhzb3J0KSpQKHBwaWQpKmFBZGVmbE1ubypPKnAocGlkKSpzKnQqVHUqVSpnKkcqd1pbIW9sXVsrQWVdWyFvT10iLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0xPQ0FMRSkpCiBVU0VfUFdEKE5FV1RPWShwd2QsICI+MExQWy1MUF0iLCBUT1lGTEFHX0JJTnxUT1lGTEFHX01BWUZPUkspKQogVVNFX1BXRFgoTkVXVE9ZKHB3ZHgsICI8MWEiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCitVU0VfUFdHRU4oTkVXVE9ZKHB3Z2VuLCAiPjJyKHJlbW92ZSk6YyhjYXBpdGFsaXplKW4obnVtZXJhbHMpeShzeW1ib2xzKXMoc2VjdXJlKUIoYW1iaWd1b3VzKWgoaGVscClDMXZBKG5vLWNhcGl0YWxpemUpMChuby1udW1lcmFscylbLWNBXVstbjBdWy1DMV0iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfUkVBREFIRUFEKE5FV1RPWShyZWFkYWhlYWQsIE5VTEwsIFRPWUZMQUdfQklOKSkKIFVTRV9SRUFERUxGKE5FV1RPWShyZWFkZWxmLCAiPDEoZHluLXN5bXMpYWRlaGxucDpTc1d4OiIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIFVTRV9SRUFETElOSyhORVdUT1kocmVhZGxpbmssICI8MW5xbWVmKGNhbm9uaWNhbGl6ZSlbLW1lZl0iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCkBAIC0yMjcsNiArMjI5LDcgQEAKIFVTRV9TRUQoTkVXVE9ZKHNlZCwgIihoZWxwKSh2ZXJzaW9uKWUqZippOjtuRXJ6KG51bGwtZGF0YSlzWytFcl0iLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0xPQ0FMRXxUT1lGTEFHX05PSEVMUCkpCiBVU0VfU0VOREVWRU5UKE5FV1RPWShzZW5kZXZlbnQsICI8ND40IiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19TQklOKSkKIFVTRV9TRVEoTkVXVE9ZKHNlcSwgIjwxPjM/ZjpzOndbIWZ3XSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKK1VTRV9TSChORVdUT1koc2V0LCAwLCBUT1lGTEFHX05PRk9SSykpCiBVU0VfU0VURU5GT1JDRShORVdUT1koc2V0ZW5mb3JjZSwgIjwxPjEiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX1NCSU4pKQogVVNFX1NFVEZBVFRSKE5FV1RPWShzZXRmYXR0ciwgImhuOnx2Ong6fFsheHZdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX1NFVFNJRChORVdUT1koc2V0c2lkLCAiXjwxd2NkWyFkY10iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCkBAIC0yODQsNiArMjg3LDcgQEAKIFVTRV9VTElNSVQoTkVXVE9ZKHVsaW1pdCwgIj4xUCM8MVNIYXZ1dHNyUnFwbm1saWZlZGNbLVNIXVshYXB2dXRzclJxbm1saWZlZGNdIiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX1VNT1VOVChORVdUT1kodW1vdW50LCAiY25kRGZscmF0KnZbIW5hXSIsIFRPWUZMQUdfQklOfFRPWUZMQUdfU1RBWVJPT1QpKQogVVNFX1VOQU1FKE5FV1RPWSh1bmFtZSwgIm9hbXZybnNbK29zXSIsIFRPWUZMQUdfQklOKSkKK1VTRV9VTklDT0RFKE5FV1RPWSh1bmljb2RlLCAiPDEiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCiBVU0VfVU5JUShORVdUT1kodW5pcSwgImYjcyN3I3ppY2R1IiwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU4pKQogVVNFX1VOSVgyRE9TKE5FV1RPWSh1bml4MmRvcywgMCwgVE9ZRkxBR19CSU4pKQogVVNFX1VOTElOSyhORVdUT1kodW5saW5rLCAiPDE+MSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKZGlmZiAtLWdpdCBhL2tjb25maWcvZnJlZWJzZF9taW5pY29uZmlnIGIva2NvbmZpZy9mcmVlYnNkX21pbmljb25maWcKaW5kZXggOThkM2MxYy4uM2E2ZmE4MCAxMDA2NDQKLS0tIGEva2NvbmZpZy9mcmVlYnNkX21pbmljb25maWcKKysrIGIva2NvbmZpZy9mcmVlYnNkX21pbmljb25maWcKQEAgLTEyNSw0ICsxMjUsMyBAQAogQ09ORklHX1RPWUJPWF9GTE9BVD15CiBDT05GSUdfVE9ZQk9YX0hFTFA9eQogQ09ORklHX1RPWUJPWF9IRUxQX0RBU0hEQVNIPXkKLUNPTkZJR19UT1lCT1hfSTE4Tj15CmRpZmYgLS1naXQgYS9rY29uZmlnL21hY29zX21pbmljb25maWcgYi9rY29uZmlnL21hY29zX21pbmljb25maWcKaW5kZXggNzE2NjMxMy4uNzc1ZDhkNiAxMDA2NDQKLS0tIGEva2NvbmZpZy9tYWNvc19taW5pY29uZmlnCisrKyBiL2tjb25maWcvbWFjb3NfbWluaWNvbmZpZwpAQCAtMTE0LDQgKzExNCwzIEBACiBDT05GSUdfVE9ZQk9YX0ZMT0FUPXkKIENPTkZJR19UT1lCT1hfSEVMUD15CiBDT05GSUdfVE9ZQk9YX0hFTFBfREFTSERBU0g9eQotQ09ORklHX1RPWUJPWF9JMThOPXkKZGlmZiAtLWdpdCBhL2xpYi9kZWZsYXRlLmMgYi9saWIvZGVmbGF0ZS5jCmluZGV4IGVlYmNkM2QuLjhjNzI0NDIgMTAwNjQ0Ci0tLSBhL2xpYi9kZWZsYXRlLmMKKysrIGIvbGliL2RlZmxhdGUuYwpAQCAtNDAzLDcgKzQwMyw3IEBACiAgIGJpdGJ1Zl9za2lwKGJiLCA2KjgpOwogCiAgIC8vIFNraXAgZXh0cmEsIG5hbWUsIGNvbW1lbnQsIGhlYWRlciBDUkMgZmllbGRzCi0gIGlmIChmbGFncyAmIDQpIGJpdGJ1Zl9za2lwKGJiLCAxNik7CisgIGlmIChmbGFncyAmIDQpIGJpdGJ1Zl9za2lwKGJiLCBiaXRidWZfZ2V0KGJiLCAxNikgKiA4KTsKICAgaWYgKGZsYWdzICYgOCkgd2hpbGUgKGJpdGJ1Zl9nZXQoYmIsIDgpKTsKICAgaWYgKGZsYWdzICYgMTYpIHdoaWxlIChiaXRidWZfZ2V0KGJiLCA4KSk7CiAgIGlmIChmbGFncyAmIDIpIGJpdGJ1Zl9za2lwKGJiLCAxNik7CmRpZmYgLS1naXQgYS9saWIvbGliLmMgYi9saWIvbGliLmMKaW5kZXggYzRlNzBkZi4uMWFhOWI4MCAxMDA2NDQKLS0tIGEvbGliL2xpYi5jCisrKyBiL2xpYi9saWIuYwpAQCAtMzQ5LDE3ICszNDksMTggQEAKIC8vIENvbnZlcnQgd2MgdG8gdXRmOCwgcmV0dXJuaW5nIGJ5dGVzIHdyaXR0ZW4uIERvZXMgbm90IG51bGwgdGVybWluYXRlLgogaW50IHdjdG91dGY4KGNoYXIgKnMsIHVuc2lnbmVkIHdjKQogewotICBpbnQgbGVuID0gKHdjPjB4N2ZmKSsod2M+MHhmZmZmKSwgbWFzayA9IDEyK2xlbishIWxlbjsKKyAgaW50IGxlbiA9ICh3Yz4weDdmZikrKHdjPjB4ZmZmZiksIGk7CiAKICAgaWYgKHdjPDEyOCkgewogICAgICpzID0gd2M7CiAgICAgcmV0dXJuIDE7CiAgIH0gZWxzZSB7CisgICAgaSA9IGxlbjsKICAgICBkbyB7Ci0gICAgICBzWzErbGVuXSA9IDB4ODArKHdjJjB4M2YpOwotICAgICAgd2MgPj49IDc7Ci0gICAgfSB3aGlsZSAobGVuLS0pOwotICAgICpzID0gd2N8bWFzazsKKyAgICAgIHNbMStpXSA9IDB4ODArKHdjJjB4M2YpOworICAgICAgd2MgPj49IDY7CisgICAgfSB3aGlsZSAoaS0tKTsKKyAgICAqcyA9ICgoKHNpZ25lZCBjaGFyKSAweDgwKSA+PiAobGVuKzEpKSB8IHdjOwogICB9CiAKICAgcmV0dXJuIDIrbGVuOwpAQCAtMzk1LDM3ICszOTYsNDEgQEAKICAgcmV0dXJuIHN0ci1zOwogfQogCisvLyBDb252ZXJ0IHN0cmluZyB0byBsb3dlciBjYXNlLCB1dGY4IGF3YXJlLgogY2hhciAqc3RybG93ZXIoY2hhciAqcykKIHsKICAgY2hhciAqdHJ5LCAqbmV3OworICBpbnQgbGVuLCBtbGVuID0gKHN0cmxlbihzKXw3KSs5OworICB3Y2hhcl90IGM7CiAKLSAgaWYgKCFDRkdfVE9ZQk9YX0kxOE4pIHsKLSAgICB0cnkgPSBuZXcgPSB4c3RyZHVwKHMpOwotICAgIGZvciAoOyAqczsgcysrKSAqKG5ldysrKSA9IHRvbG93ZXIoKnMpOwotICB9IGVsc2UgewotICAgIC8vIEkgY2FuJ3QgZ3VhcmFudGVlIHRoZSBzdHJpbmcgX3dvbid0XyBleHBhbmQgZHVyaW5nIHJlZW5jb2RpbmcsIHNvLi4uPwotICAgIHRyeSA9IG5ldyA9IHhtYWxsb2Moc3RybGVuKHMpKjIrMSk7CisgIHRyeSA9IG5ldyA9IHhtYWxsb2MobWxlbik7CiAKLSAgICB3aGlsZSAoKnMpIHsKLSAgICAgIHdjaGFyX3QgYzsKLSAgICAgIGludCBsZW4gPSB1dGY4dG93YygmYywgcywgTUJfQ1VSX01BWCk7CisgIHdoaWxlICgqcykgewogCi0gICAgICBpZiAobGVuIDwgMSkgKihuZXcrKykgPSAqKHMrKyk7Ci0gICAgICBlbHNlIHsKLSAgICAgICAgcyArPSBsZW47Ci0gICAgICAgIC8vIHNxdWFzaCB0aXRsZSBjYXNlIHRvbwotICAgICAgICBjID0gdG93bG93ZXIoYyk7CisgICAgaWYgKDE+KGxlbiA9IHV0Zjh0b3djKCZjLCBzLCBNQl9DVVJfTUFYKSkpIHsKKyAgICAgICoobmV3KyspID0gKihzKyspOwogCi0gICAgICAgIC8vIGlmIHdlIGhhZCBhIHZhbGlkIHV0Zjggc2VxdWVuY2UsIGNvbnZlcnQgaXQgdG8gbG93ZXIgY2FzZSwgYW5kIGNhbid0Ci0gICAgICAgIC8vIGVuY29kZSBiYWNrIHRvIHV0ZjgsIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHlvdXIgbGliYy4gQnV0IGp1c3QKLSAgICAgICAgLy8gaW4gY2FzZSBzb21lYm9keSBmaW5kcyBhbiBleHBsb2l0Li4uCi0gICAgICAgIGxlbiA9IHdjcnRvbWIobmV3LCBjLCAwKTsKLSAgICAgICAgaWYgKGxlbiA8IDEpIGVycm9yX2V4aXQoImJhZCB1dGY4ICV4IiwgKGludCljKTsKLSAgICAgICAgbmV3ICs9IGxlbjsKLSAgICAgIH0KKyAgICAgIGNvbnRpbnVlOwogICAgIH0KLSAgICAqbmV3ID0gMDsKKworICAgIHMgKz0gbGVuOworICAgIC8vIHNxdWFzaCB0aXRsZSBjYXNlIHRvbworICAgIGMgPSB0b3dsb3dlcihjKTsKKworICAgIC8vIGlmIHdlIGhhZCBhIHZhbGlkIHV0Zjggc2VxdWVuY2UsIGNvbnZlcnQgaXQgdG8gbG93ZXIgY2FzZSwgYW5kIGNhbid0CisgICAgLy8gZW5jb2RlIGJhY2sgdG8gdXRmOCwgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggeW91ciBsaWJjLiBCdXQganVzdAorICAgIC8vIGluIGNhc2Ugc29tZWJvZHkgZmluZHMgYW4gZXhwbG9pdC4uLgorICAgIGxlbiA9IHdjcnRvbWIobmV3LCBjLCAwKTsKKyAgICBpZiAobGVuIDwgMSkgZXJyb3JfZXhpdCgiYmFkIHV0ZjggJXgiLCAoaW50KWMpOworICAgIG5ldyArPSBsZW47CisKKyAgICAvLyBDYXNlIGNvbnZlcnNpb24gY2FuIGV4cGFuZCB1dGY4IHJlcHJlc2VudGF0aW9uLCBidXQgd2l0aCBleHRyYSBtbGVuCisgICAgLy8gc3BhY2UgYWJvdmUgd2Ugc2hvdWxkIGJhc2ljYWxseSBuZXZlciBuZWVkIHRvIHJlYWxsb2MKKyAgICBpZiAobWxlbis0ID4gKGxlbiA9IG5ldy10cnkpKSBjb250aW51ZTsKKyAgICB0cnkgPSB4cmVhbGxvYyh0cnksIG1sZW4gPSBsZW4rMTYpOworICAgIG5ldyA9IHRyeStsZW47CiAgIH0KKyAgKm5ldyA9IDA7CiAKICAgcmV0dXJuIHRyeTsKIH0KQEAgLTg2NSw2ICs4NzAsMTggQEAKICAgKihwKyspID0gJy8nOwogfQogCisvLyBJbml0IGJhc2UzMiB0YWJsZQorCit2b2lkIGJhc2UzMl9pbml0KGNoYXIgKnApCit7CisgIGludCBpOworCisgIGZvciAoaSA9ICdBJzsgaSAhPSAnOCc7IGkrKykgeworICAgIGlmIChpID09ICdaJysxKSBpID0gJzInOworICAgICoocCsrKSA9IGk7CisgIH0KK30KKwogaW50IHllc25vKGludCBkZWYpCiB7CiAgIHJldHVybiBmeWVzbm8oc3RkaW4sIGRlZik7CkBAIC05NzAsNTUgKzk4Nyw1MSBAQAogICAgICAgdW1hc2soYW1hc2sgPSB1bWFzaygwKSk7CiAgICAgfQogCi0gICAgaWYgKCEqc3RyIHx8ICEocyA9IHN0cmNocihob3dzLCAqc3RyKSkpIGdvdG8gYmFyZjsKLSAgICBpZiAoIShkb2hvdyA9ICooc3RyKyspKSkgZ290byBiYXJmOworICAgIC8vIFJlcGVhdGVkICJob3dzIiBhcmUgYWxsb3dlZDsgc29tZXRoaW5nIGxpa2UgImE9cit3K3MiIGlzIHZhbGlkLgorICAgIGZvciAoOzspIHsKKyAgICAgIGlmICgtMSA9PSBzdHJpZHgoaG93cywgZG9ob3cgPSAqc3RyKSkgZ290byBiYXJmOworICAgICAgd2hpbGUgKCorK3N0ciAmJiAocyA9IHN0cmNocih3aGF0cywgKnN0cikpKSBkb3doYXQgfD0gMTw8KHMtd2hhdHMpOwogCi0gICAgd2hpbGUgKCpzdHIgJiYgKHMgPSBzdHJjaHIod2hhdHMsICpzdHIpKSkgewotICAgICAgZG93aGF0IHw9IDE8PChzLXdoYXRzKTsKLSAgICAgIHN0cisrOwotICAgIH0KKyAgICAgIC8vIENvbnZlcnQgWCB0byB4IGZvciBkaXJlY3Rvcnkgb3IgaWYgYWxyZWFkeSBleGVjdXRhYmxlIHNvbWV3aGVyZQorICAgICAgaWYgKChkb3doYXQmMzIpICYmIChTX0lTRElSKG1vZGUpIHx8IChtb2RlJjAxMTEpKSkgZG93aGF0IHw9IDE7CiAKLSAgICAvLyBDb252ZXJ0IFggdG8geCBmb3IgZGlyZWN0b3J5IG9yIGlmIGFscmVhZHkgZXhlY3V0YWJsZSBzb21ld2hlcmUKLSAgICBpZiAoKGRvd2hhdCYzMikgJiYgIChTX0lTRElSKG1vZGUpIHx8IChtb2RlJjAxMTEpKSkgZG93aGF0IHw9IDE7CisgICAgICAvLyBDb3B5IG1vZGUgZnJvbSBhbm90aGVyIGNhdGVnb3J5PworICAgICAgaWYgKCFkb3doYXQgJiYgLTEgIT0gKGkgPSBzdHJpZHgod2h5cywgKnN0cikpKSB7CisgICAgICAgIGRvd2hhdCA9IChtb2RlPj4oMyppKSkmNzsKKyAgICAgICAgc3RyKys7CisgICAgICB9CiAKLSAgICAvLyBDb3B5IG1vZGUgZnJvbSBhbm90aGVyIGNhdGVnb3J5PwotICAgIGlmICghZG93aGF0ICYmICpzdHIgJiYgKHMgPSBzdHJjaHIod2h5cywgKnN0cikpKSB7Ci0gICAgICBkb3doYXQgPSAobW9kZT4+KDMqKHMtd2h5cykpKSY3OwotICAgICAgc3RyKys7Ci0gICAgfQorICAgICAgLy8gTG9vcCB0aHJvdWdoIHdoYXQ9eHdycyBhbmQgd2hvPW9ndSB0byBhcHBseSBiaXRzIHRvIHRoZSBtb2RlLgorICAgICAgZm9yIChpPTA7IGk8NDsgaSsrKSB7CisgICAgICAgIGZvciAoaj0wOyBqPDM7IGorKykgeworICAgICAgICAgIG1vZGVfdCBiaXQgPSAwOworICAgICAgICAgIGludCB3aGVyZSA9IDE8PCgoMyppKStqKTsKIAotICAgIC8vIEFyZSB3ZSByZWFkeSB0byBkbyBhIHRoaW5nIHlldD8KLSAgICBpZiAoKnN0ciAmJiAqKHN0cisrKSAhPSAnLCcpIGdvdG8gYmFyZjsKKyAgICAgICAgICBpZiAoYW1hc2sgJiB3aGVyZSkgY29udGludWU7CiAKLSAgICAvLyBMb29wIHRocm91Z2ggd2hhdD14d3JzIGFuZCB3aG89b2d1IHRvIGFwcGx5IGJpdHMgdG8gdGhlIG1vZGUuCi0gICAgZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0gICAgICBmb3IgKGo9MDsgajwzOyBqKyspIHsKLSAgICAgICAgbW9kZV90IGJpdCA9IDA7Ci0gICAgICAgIGludCB3aGVyZSA9IDE8PCgoMyppKStqKTsKKyAgICAgICAgICAvLyBGaWd1cmUgb3V0IG5ldyB2YWx1ZSBhdCB0aGlzIGxvY2F0aW9uCisgICAgICAgICAgaWYgKGkgPT0gMykgeworICAgICAgICAgICAgLy8gc3VpZCBhbmQgc3RpY2t5CisgICAgICAgICAgICBpZiAoIWopIGJpdCA9IGRvd2hhdCYxNjsgLy8gbytzID0gdCBidXQgYStzIGRvZXNuJ3Qgc2V0IHQsIGhlbmNlIHQKKyAgICAgICAgICAgIGVsc2UgaWYgKChkb3doYXQmOCkgJiYgKGRvd2hvJig4fCgxPDxqKSkpKSBiaXQrKzsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCEoZG93aG8mKDh8KDE8PGkpKSkpIGNvbnRpbnVlOworICAgICAgICAgICAgZWxzZSBpZiAoZG93aGF0JigxPDxqKSkgYml0Kys7CisgICAgICAgICAgfQogCi0gICAgICAgIGlmIChhbWFzayAmIHdoZXJlKSBjb250aW51ZTsKLQotICAgICAgICAvLyBGaWd1cmUgb3V0IG5ldyB2YWx1ZSBhdCB0aGlzIGxvY2F0aW9uCi0gICAgICAgIGlmIChpID09IDMpIHsKLSAgICAgICAgICAvLyBzdWlkIGFuZCBzdGlja3kKLSAgICAgICAgICBpZiAoIWopIGJpdCA9IGRvd2hhdCYxNjsgLy8gbytzID0gdAotICAgICAgICAgIGVsc2UgaWYgKChkb3doYXQmOCkgJiYgKGRvd2hvJig4fCgxPDxqKSkpKSBiaXQrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoIShkb3dobyYoOHwoMTw8aSkpKSkgY29udGludWU7Ci0gICAgICAgICAgZWxzZSBpZiAoZG93aGF0JigxPDxqKSkgYml0Kys7CisgICAgICAgICAgLy8gV2hlbiBzZWxlY3Rpb24gYWN0aXZlLCBtb2RpZnkgYml0CisgICAgICAgICAgaWYgKGRvaG93ID09ICc9JyB8fCAoYml0ICYmIGRvaG93ID09ICctJykpIG1vZGUgJj0gfndoZXJlOworICAgICAgICAgIGlmIChiaXQgJiYgZG9ob3cgIT0gJy0nKSBtb2RlIHw9IHdoZXJlOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2hlbiBzZWxlY3Rpb24gYWN0aXZlLCBtb2RpZnkgYml0Ci0KLSAgICAgICAgaWYgKGRvaG93ID09ICc9JyB8fCAoYml0ICYmIGRvaG93ID09ICctJykpIG1vZGUgJj0gfndoZXJlOwotICAgICAgICBpZiAoYml0ICYmIGRvaG93ICE9ICctJykgbW9kZSB8PSB3aGVyZTsKKyAgICAgIH0KKyAgICAgIGlmICghKnN0cikgcmV0dXJuIG1vZGV8ZXh0cmFiaXRzOworICAgICAgaWYgKCpzdHIgPT0gJywnKSB7CisgICAgICAgIHN0cisrOworICAgICAgICBicmVhazsKICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAoISpzdHIpIGJyZWFrOwogICB9CiAKLSAgcmV0dXJuIG1vZGV8ZXh0cmFiaXRzOwogYmFyZjoKICAgZXJyb3JfZXhpdCgiYmFkIG1vZGUgJyVzJyIsIG1vZGVzdHIpOwogfQpkaWZmIC0tZ2l0IGEvbGliL2xpYi5oIGIvbGliL2xpYi5oCmluZGV4IDE1MDEzM2IuLjFiYTU5ZWUgMTAwNjQ0Ci0tLSBhL2xpYi9saWIuaAorKysgYi9saWIvbGliLmgKQEAgLTI1NSw2ICsyNTUsNyBAQAogdm9pZCByZXBsYWNlX3RlbXBmaWxlKGludCBmZGluLCBpbnQgZmRvdXQsIGNoYXIgKip0ZW1wbmFtZSk7CiB2b2lkIGNyY19pbml0KHVuc2lnbmVkIGludCAqY3JjX3RhYmxlLCBpbnQgbGl0dGxlX2VuZGlhbik7CiB2b2lkIGJhc2U2NF9pbml0KGNoYXIgKnApOwordm9pZCBiYXNlMzJfaW5pdChjaGFyICpwKTsKIGludCB5ZXNubyhpbnQgZGVmKTsKIGludCBmeWVzbm8oRklMRSAqZnAsIGludCBkZWYpOwogaW50IHFzdHJjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CkBAIC0zMzcsNiArMzM4LDcgQEAKICNkZWZpbmUgS0VZX0FMVCAoMTw8MTgpCiBpbnQgc2Nhbl9rZXkoY2hhciAqc2NyYXRjaCwgaW50IHRpbWVvdXRfbXMpOwogaW50IHNjYW5fa2V5X2dldHNpemUoY2hhciAqc2NyYXRjaCwgaW50IHRpbWVvdXRfbXMsIHVuc2lnbmVkICp4eCwgdW5zaWduZWQgKnl5KTsKK3ZvaWQgeHNldHNwZWVkKHN0cnVjdCB0ZXJtaW9zICp0aW8sIGludCBzcGVlZCk7CiBpbnQgc2V0X3Rlcm1pbmFsKGludCBmZCwgaW50IHJhdywgaW50IHNwZWVkLCBzdHJ1Y3QgdGVybWlvcyAqb2xkKTsKIHZvaWQgeHNldF90ZXJtaW5hbChpbnQgZmQsIGludCByYXcsIGludCBzcGVlZCwgc3RydWN0IHRlcm1pb3MgKm9sZCk7CiB2b2lkIHR0eV9lc2MoY2hhciAqcyk7CmRpZmYgLS1naXQgYS9saWIvcG9ydGFiaWxpdHkuYyBiL2xpYi9wb3J0YWJpbGl0eS5jCmluZGV4IDkxYzAxOTAuLjBjMzY0YzIgMTAwNjQ0Ci0tLSBhL2xpYi9wb3J0YWJpbGl0eS5jCisrKyBiL2xpYi9wb3J0YWJpbGl0eS5jCkBAIC0xMjYsMTQgKzEyNiwxNSBAQAogCiAgIGlmICghdHlwZWxpc3QpIHJldHVybiAxOwogCisgIC8vIGxlYWRpbmcgIm5vIiBpbmRpY2F0ZXMgd2hldGhlciBlbnRpcmUgbGlzdCBpcyBpbnZlcnRlZAogICBza2lwID0gc3RybmNtcCh0eXBlbGlzdCwgIm5vIiwgMik7CiAKICAgZm9yICg7OykgewogICAgIGlmICghKHQgPSBjb21tYV9pdGVyYXRlKCZ0eXBlbGlzdCwgJmxlbikpKSBicmVhazsKICAgICBpZiAoIXNraXApIHsKLSAgICAgIC8vIElmIG9uZSAtdCBzdGFydHMgd2l0aCAibm8iLCB0aGUgcmVzdCBtdXN0IHRvbwotICAgICAgaWYgKHN0cm5jbXAodCwgIm5vIiwgMikpIGVycm9yX2V4aXQoImJhZCB0eXBlbGlzdCIpOwotICAgICAgaWYgKCFzdHJuY21wKHQrMiwgbWwtPnR5cGUsIGxlbi0yKSkgeworICAgICAgLy8gbGF0ZXIgIm5vIiBhZnRlciBmaXJzdCBhcmUgaWdub3JlZAorICAgICAgc3Ryc3RhcnQoJnQsICJubyIpOworICAgICAgaWYgKCFzdHJuY21wKHQsIG1sLT50eXBlLCBsZW4tMikpIHsKICAgICAgICAgc2tpcCA9IDE7CiAgICAgICAgIGJyZWFrOwogICAgICAgfQpkaWZmIC0tZ2l0IGEvbGliL3BvcnRhYmlsaXR5LmggYi9saWIvcG9ydGFiaWxpdHkuaAppbmRleCA1ODg2ZjYzLi5iYmJhMTJkIDEwMDY0NAotLS0gYS9saWIvcG9ydGFiaWxpdHkuaAorKysgYi9saWIvcG9ydGFiaWxpdHkuaApAQCAtMjA4LDEyICsyMDgsMTYgQEAKIHNzaXplX3QgeGF0dHJfZnNldChpbnQsIGNvbnN0IGNoYXIqLCBjb25zdCB2b2lkKiwgc2l6ZV90LCBpbnQpOwogI2VuZGlmCiAKLS8vIG1hY09TIGRvZXNuJ3QgaGF2ZSB0aGVzZSBmdW5jdGlvbnMsIGJ1dCB3ZSBjYW4gZmFrZSB0aGVtLgogI2lmZGVmIF9fQVBQTEVfXworLy8gbWFjT1MgZG9lc24ndCBoYXZlIHRoZXNlIGZ1bmN0aW9ucywgYnV0IHdlIGNhbiBmYWtlIHRoZW0uCiBpbnQgbWtub2RhdChpbnQsIGNvbnN0IGNoYXIqLCBtb2RlX3QsIGRldl90KTsKIGludCBwb3NpeF9mYWxsb2NhdGUoaW50LCBvZmZfdCwgb2ZmX3QpOworCisvLyBtYWNPUyBrZWVwcyBuZXdsb2NhbGUoMykgaW4gdGhlIG5vbi1QT1NJWCA8eGxvY2FsZS5oPiByYXRoZXIgdGhhbiA8bG9jYWxlLmg+LgorI2luY2x1ZGUgPHhsb2NhbGUuaD4KICNlbmRpZgogCisKIC8vIEFuZHJvaWQgaXMgbWlzc2luZyBzb21lIGhlYWRlcnMgYW5kIGZ1bmN0aW9ucwogLy8gImdlbmVyYXRlZC9jb25maWcuaCIgaXMgaW5jbHVkZWQgZmlyc3QKICNpZiBDRkdfVE9ZQk9YX1NIQURPVwpkaWZmIC0tZ2l0IGEvbGliL3RveWZsYWdzLmggYi9saWIvdG95ZmxhZ3MuaAppbmRleCBiMTU4YmE4Li5jODgzMDg3IDEwMDY0NAotLS0gYS9saWIvdG95ZmxhZ3MuaAorKysgYi9saWIvdG95ZmxhZ3MuaApAQCAtMzIsNiArMzIsOSBAQAogLy8gU3VwcHJlc3MgZGVmYXVsdCAtLWhlbHAgcHJvY2Vzc2luZwogI2RlZmluZSBUT1lGTEFHX05PSEVMUCAgICgxPDwxMCkKIAorLy8gTGluZSBidWZmZXJlZCBzdGRvdXQKKyNkZWZpbmUgVE9ZRkxBR19MSU5FQlVGICAoMTw8MTEpCisKIC8vIEVycm9yIGNvZGUgdG8gcmV0dXJuIGlmIGFyZ3VtZW50IHBhcnNpbmcgZmFpbHMgKGRlZmF1bHQgMSkKICNkZWZpbmUgVE9ZRkxBR19BUkdGQUlMKHgpICh4PDwyNCkKIApkaWZmIC0tZ2l0IGEvbGliL3R0eS5jIGIvbGliL3R0eS5jCmluZGV4IGE2YjQ1NzYuLmIwZDBjNWQgMTAwNjQ0Ci0tLSBhL2xpYi90dHkuYworKysgYi9saWIvdHR5LmMKQEAgLTYxLDYgKzYxLDIwIEBACiAgIHJldHVybiAwOwogfQogCit2b2lkIHhzZXRzcGVlZChzdHJ1Y3QgdGVybWlvcyAqdGlvLCBpbnQgc3BlZWQpCit7CisgIGludCBpLCBzcGVlZHNbXSA9IHs1MCwgNzUsIDExMCwgMTM0LCAxNTAsIDIwMCwgMzAwLCA2MDAsIDEyMDAsIDE4MDAsIDI0MDAsCisgICAgICAgICAgICAgICAgICAgIDQ4MDAsIDk2MDAsIDE5MjAwLCAzODQwMCwgNTc2MDAsIDExNTIwMCwgMjMwNDAwLCA0NjA4MDAsCisgICAgICAgICAgICAgICAgICAgIDUwMDAwMCwgNTc2MDAwLCA5MjE2MDAsIDEwMDAwMDAsIDExNTIwMDAsIDE1MDAwMDAsIDIwMDAwMDAsCisgICAgICAgICAgICAgICAgICAgIDI1MDAwMDAsIDMwMDAwMDAsIDM1MDAwMDAsIDQwMDAwMDB9OworCisgIC8vIEZpbmQgc3BlZWQgaW4gdGFibGUsIGFkanVzdCB0byBjb25zdGFudAorICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfTEVOKHNwZWVkcyk7IGkrKykgaWYgKHNwZWVkc1tpXSA9PSBzcGVlZCkgYnJlYWs7CisgIGlmIChpID09IEFSUkFZX0xFTihzcGVlZHMpKSBlcnJvcl9leGl0KCJ1bmtub3duIHNwZWVkOiAlZCIsIHNwZWVkKTsKKyAgY2ZzZXRzcGVlZCh0aW8sIGkrMSs0MDgxKihpPjE1KSk7Cit9CisKKwogLy8gUmVzZXQgdGVybWluYWwgdG8ga25vd24gc3RhdGUsIHNhdmluZyBjb3B5IG9mIG9sZCBzdGF0ZSBpZiBvbGQgIT0gTlVMTC4KIGludCBzZXRfdGVybWluYWwoaW50IGZkLCBpbnQgcmF3LCBpbnQgc3BlZWQsIHN0cnVjdCB0ZXJtaW9zICpvbGQpCiB7CmRpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKaW5kZXggN2M2MGJkZi4uYTdhOGE2OSAxMDA2NDQKLS0tIGEvbWFpbi5jCisrKyBiL21haW4uYwpAQCAtOTgsMTIgKzk4LDE1IEBACiAgIGlmICghKHdoaWNoLT5mbGFncyAmIFRPWUZMQUdfTk9GT1JLKSkgewogICAgIHRveXMub2xkX3VtYXNrID0gdW1hc2soMCk7CiAgICAgaWYgKCEod2hpY2gtPmZsYWdzICYgVE9ZRkxBR19VTUFTSykpIHVtYXNrKHRveXMub2xkX3VtYXNrKTsKLSAgICBpZiAoQ0ZHX1RPWUJPWF9JMThOKSB7Ci0gICAgICAvLyBEZWxpYmVyYXRlbHkgdHJ5IEMuVVRGLTggYmVmb3JlIHRoZSB1c2VyJ3MgbG9jYWxlIHRvIHdvcmsgYXJvdW5kIHVzZXJzCi0gICAgICAvLyB0aGF0IGNob29zZSBub24tVVRGLTggbG9jYWxlcy4gbWFjT1MgZG9lc24ndCBzdXBwb3J0IEMuVVRGLTggdGhvdWdoLgotICAgICAgaWYgKCFzZXRsb2NhbGUoTENfQ1RZUEUsICJDLlVURi04IikpIHNldGxvY2FsZShMQ19DVFlQRSwgIiIpOwotICAgIH0KLSAgICBzZXRsaW5lYnVmKHN0ZG91dCk7CisKKyAgICAvLyBUcnkgdXNlcidzIGxvY2FsZSwgYnV0IG1lcmdlIGluIHRoZSBlbl9VUy5VVEYtOCBsb2NhbGUncyBjaGFyYWN0ZXIKKyAgICAvLyB0eXBlIGRhdGEgaWYgdGhlIHVzZXIncyBsb2NhbGUgaXNuJ3QgVVRGLTguIChXZSBjYW4ndCBtZXJnZSBpbiBDLlVURi04CisgICAgLy8gYmVjYXVzZSB0aGF0IGxvY2FsZSBkb2Vzbid0IGV4aXN0IG9uIG1hY09TLikKKyAgICBzZXRsb2NhbGUoTENfQ1RZUEUsICIiKTsKKyAgICBpZiAoc3RyY21wKCJVVEYtOCIsIG5sX2xhbmdpbmZvKENPREVTRVQpKSkKKyAgICAgIHVzZWxvY2FsZShuZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgImVuX1VTLlVURi04IiwgTlVMTCkpOworCisgICAgc2V0dmJ1ZihzdGRvdXQsIDAsICh3aGljaC0+ZmxhZ3MgJiBUT1lGTEFHX0xJTkVCVUYpID8gX0lPTEJGIDogX0lPTkJGLCAwKTsKICAgfQogfQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL3J1bnRlc3Quc2ggYi9zY3JpcHRzL3J1bnRlc3Quc2gKaW5kZXggZGRiZjA1NC4uNmFhZDlmZiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9ydW50ZXN0LnNoCisrKyBiL3NjcmlwdHMvcnVudGVzdC5zaApAQCAtODEsNyArODEsMTMgQEAKIHRveW9ubHkoKQogewogICBJU19UT1lCT1g9IiQoIiRDIiAtLXZlcnNpb24gMj4vZGV2L251bGwpIgotICBbICIke0lTX1RPWUJPWC90b3lib3gvfSIgPT0gIiRJU19UT1lCT1giIF0gJiYgU0tJUE5FWFQ9MQorICAjIElkZWFsbHkgd2UnZCBqdXN0IGNoZWNrIGZvciAidG95Ym94IiwgYnV0IHRveWJveCBzZWQgbGllcyB0byBtYWtlIGF1dG9jb25mCisgICMgaGFwcHksIHNvIHdlIGhhdmUgYXQgbGVhc3QgdHdvIHRoaW5ncyB0byBjaGVjayBmb3IuCisgIGNhc2UgIiRJU19UT1lCT1giIGluCisgICAgdG95Ym94KikgOzsKKyAgICBUaGlzXCBpc1wgbm90XCBHTlUqKSA7OworICAgICopIFNLSVBORVhUPTEgOzsKKyAgZXNhYwogCiAgICIkQCIKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL2Jhc2UzMi50ZXN0IGIvdGVzdHMvYmFzZTMyLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDBiY2ZmYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2Jhc2UzMi50ZXN0CkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9iYXNoCisKK1sgLWYgdGVzdGluZy5zaCBdICYmIC4gdGVzdGluZy5zaAorCisjIHRlc3RpbmcgIm5hbWUiICJmbGFncyIgInJlc3VsdCIgImluZmlsZSIgInN0ZGluIgorCit0ZXN0Y21kICJzaW1wbGUiICIiICJPTlVXMjRETU1VRkE9PT09XG4iICIiICJzaW1wbGVcbiIKK3Rlc3RjbWQgImZpbGUiICJpbnB1dCIgIk9OVVcyNERNTVVGQT09PT1cbiIgInNpbXBsZVxuIiAiIgordGVzdGNtZCAic2ltcGxlIC1kIiAiLWQiICJzaW1wbGVcbiIgIiIgIk9OVVcyNERNTVVGQT09PT1cbiIKK3Rlc3RjbWQgImZpbGUgLWQiICItZCBpbnB1dCIgInNpbXBsZVxuIiAiT05VVzI0RE1NVUZBPT09PSIgIiIKK3Rlc3RjbWQgImRlZmF1bHQgd3JhcCIgIiIgXAorICAiSzVTU081VEZFQlpHSzRETU1GUldLWkJBT1JVR0tJREVORldHUzVESU5GMlcySURVTkJTWFNJRE9ONVpHMllMTU5SNFNBNUxUTVVRSFxuTzJMVU5BUUVNMzNNTTVTWEVKM1RFQkJYRTZMVE9SUVdZNFpPXG4iIFwKKyAgIiIgIldlJ3ZlIHJlcGxhY2VkIHRoZSBkaWxpdGhpdW0gdGhleSBub3JtYWxseSB1c2Ugd2l0aCBGb2xnZXIncyBDcnlzdGFscy4iCit0ZXN0Y21kICJtdWx0aWxpbmUgLWQgIiAiLWQiIFwKKyAiV2UndmUgcmVwbGFjZWQgdGhlIGRpbGl0aGl1bSB0aGV5IG5vcm1hbGx5IHVzZSB3aXRoIEZvbGdlcidzIENyeXN0YWxzLiIgIiIgXAorICAiSzVTU081VEZFQlpHSzRETU1GUldLWkJBT1JVR0tJREVORldHUzVESU5GMlcySURVTkJTWFNJRE9ONVpHMllMTU5SNFNBNUxUTVVRSFxuTzJMVU5BUUVNMzNNTTVTWEVKM1RFQkJYRTZMVE9SUVdZNFpPXG4iCisKK3Rlc3RjbWQgIi13IiAiLXcgMTAiIFwKKyAgIkpWUVhFWTNJTkZcblhHT0lEVU40UUhcbkkyREZFQlJHS1lcbkxVRUJYV01JREJcbkVCU0dTWlRHTVZcblpHSzNUVUVCVldcbks1RFVOUlNTQTNcbjNHRUJUR1M0M0lcbkZZPT09PT09XG4iIFwKKyAgIiIgIk1hcmNoaW5nIHRvIHRoZSBiZWF0IG9mIGEgZGlmZmVyZW50IGtldHRsZSBvZiBmaXNoLiIKKwordGVzdGNtZCAiLXcwIiAiLXcwIGlucHV0IiBcCisgICJLWlVXVzJMT001WlQ2SUNVTkJTWEVaSkFNRlVXNEozVUVCWEc2SURXTkZWV1MzVEhPTVFHUVpMU01VWENBU1RWT04yQ0E1TFRFQlVHNjNURk9OMkNBWlRCT0pXV0s0VFRGWVFGSTJERkVCMkc2NTNPRUIzV0M0WkFNSjJYRTNUSk5aVFNZSURVTkJTU0E1VEpOUldHQ1ozRk9KWlNBNTNGT0pTU0FaREZNRlNDNElDVU5CU1hTSURFTkZTRzRKM1VFQlhHS1pMRUVCMkdRMzNUTVVRSEcyREZNVllDQVlMT1BGM1dDNkpPRUJLR1FZTFVFNVpTQTMzVk9JUUhHNURQT0o0U0FZTE9NUVFIT1pKSE9KU1NBNDNVTkZSV1cyTE9NNFFISTNaQU5GMkM0Q1E9IiBcCisgIlZpa2luZ3M/IFRoZXJlIGFpbid0IG5vIHZpa2luZ3MgaGVyZS4gSnVzdCB1cyBob25lc3QgZmFybWVycy4gVGhlIHRvd24gd2FzIGJ1cm5pbmcsIHRoZSB2aWxsYWdlcnMgd2VyZSBkZWFkLiBUaGV5IGRpZG4ndCBuZWVkIHRob3NlIHNoZWVwIGFueXdheS4gVGhhdCdzIG91ciBzdG9yeSBhbmQgd2UncmUgc3RpY2tpbmcgdG8gaXQuXG4iICIiCmRpZmYgLS1naXQgYS90ZXN0cy9jaG1vZC50ZXN0IGIvdGVzdHMvY2htb2QudGVzdAppbmRleCBjYmMzMjgwLi5jZDRmODEwIDEwMDc1NQotLS0gYS90ZXN0cy9jaG1vZC50ZXN0CisrKyBiL3Rlc3RzL2NobW9kLnRlc3QKQEAgLTI0LDI4ICsyNCwyMCBAQAogdG91Y2ggZmlsZQogCiAjIFdlIGRvbid0IG5lZWQgdG8gdGVzdCBhbGwgNTEyIHBlcm1pc3Npb25zCi1mb3IgdSBpbiAwIDEgMiAzIDQgNSA2IDcKLWRvCi0gIGZvciBnIGluIDAgMyA2Ci0gIGRvCi0gICAgZm9yIG8gaW4gMCA3Ci0gICAgZG8KLSAgICAgIGlmIFsgIiR0eXBlIiA9PSBmaWxlIF0KLSAgICAgIHRoZW4KLSAgICAgICAgdHlwZT1kaXIKLSAgICAgICAgcm0gLXJmICIuLyR0eXBlIiAmJiBta2RpciAkdHlwZQotICAgICAgICBEQVNIPWQKLSAgICAgIGVsc2UKLSAgICAgICAgdHlwZT1maWxlCi0gICAgICAgIHJtIC1mICIuLyR0eXBlIiAmJiB0b3VjaCAkdHlwZQotICAgICAgICBEQVNIPS0KLSAgICAgIGZpCi0gICAgICBEQVNIRVM9JChudW0ycGVybSAkdSRnJG8pCi0gICAgICB0ZXN0aW5nICIkdSRnJG8gJHR5cGUiICJjaG1vZCAkdSRnJG8gJHR5cGUgJiYgCi0gICAgICAgIGxzIC1sZCAkdHlwZSB8IGN1dCAtZCcgJyAtZiAxIHwgY3V0IC1kLiAtZiAxIiAiJERBU0gkREFTSEVTXG4iICIiICIiCi0gICAgZG9uZQotICBkb25lCi1kb25lCitmb3IgVSBpbiAkKHNlcSAwIDcpOyBkbyBmb3IgRyBpbiAwIDMgNjsgZG8gZm9yIE8gaW4gMCA3OyBkbyBmb3IgVCBpbiBkaXIgZmlsZTsgZG8KKyAgY2htb2QgNzc3ICRUIDI+L2Rldi9udWxsCisgIHJtIC1yZiAkVAorICBpZiBbICIkVCIgPT0gZmlsZSBdOyB0aGVuCisgICAgdG91Y2ggZmlsZQorICAgIEM9LQorICBlbHNlCisgICAgbWtkaXIgZGlyCisgICAgQz1kCisgIGZpCisgIHRlc3RpbmcgIiRVJEckTyAkVCIgImNobW9kICRVJEckTyAkVCAmJiBscyAtbGQgJFQgfCBjdXQgLWQnICcgLWYgMSIgXAorICAgICIke0N9JChudW0ycGVybSAkVSRHJE8pXG4iICIiICIiCitkb25lOyBkb25lOyBkb25lOyBkb25lCit1bnNldCBVIEcgTyBUIEMKIAogcm0gLXJmIGRpciBmaWxlICYmIG1rZGlyIGRpciAmJiB0b3VjaCBmaWxlIDY0MAogdGVzdGluZyAiNzUwIGRpciA2NDAgZmlsZSIgImNobW9kIDc1MCBkaXIgNjQwIGZpbGUgJiYKQEAgLTU0LDYgKzQ2LDcgQEAKIAogY2h0ZXN0KCkKIHsKKyAgY2htb2QgLWZSIDcwMCBkaXIgZmlsZSAyPi9kZXYvbnVsbAogICBybSAtcmYgZGlyIGZpbGUgJiYgbWtkaXIgZGlyICYmIHRvdWNoIGZpbGUKICAgdGVzdGluZyAiJDEgZGlyIGZpbGUiIFwKICAgICAiY2htb2QgJDEgZGlyIGZpbGUgJiYgbHMgLWxkIGRpciBmaWxlIHwgY3V0IC1kJyAnIC1mIDEgfCBjdXQgLWQuIC1mIDEiIFwKQEAgLTEwNywxMCArMTAwLDIwIEBACiBjaHRlc3QgLXIgImQtd3gtLXgtLXhcbi0tdy0tLS0tLS1cbiIKIGNodGVzdCAtdyAiZHIteHIteHIteFxuLXItLXItLXItLVxuIgogY2h0ZXN0IC14ICJkcnctci0tci0tXG4tcnctci0tci0tXG4iCitjaHRlc3QgYS13LGEreCAiZHIteHIteHIteFxuLXIteHIteHIteFxuIgorCisjIG1hY09TIGRvZXNuJ3QgYWxsb3cgK3MgaW4gL3RtcAordG91Y2ggcy1zdXBwb3J0ZWQKK2NobW9kICtzIHMtc3VwcG9ydGVkIDI+L2Rldi9udWxsIHx8IFNLSVA9MQorcm0gcy1zdXBwb3J0ZWQKIGNodGVzdCBnK3MgImRyd3hyLXNyLXhcbi1ydy1yLVNyLS1cbiIKIGNodGVzdCB1K3MgImRyd3NyLXhyLXhcbi1yd1NyLS1yLS1cbiIKK2NodGVzdCArcyAiZHJ3c3Itc3IteFxuLXJ3U3ItU3ItLVxuIgogY2h0ZXN0IG8rcyAiZHJ3eHIteHIteFxuLXJ3LXItLXItLVxuIgordW5zZXQgU0tJUAorCiBjaHRlc3QgK3QgICJkcnd4ci14ci10XG4tcnctci0tci1UXG4iCitjaHRlc3QgYT1yK3creCAiZHJ3eHJ3eHJ3eFxuLXJ3eHJ3eHJ3eFxuIgogCiBta2RpciBmb28KIGxuIC1zIGJhciBmb28vYmF6CmRpZmYgLS1naXQgYS90ZXN0cy9maW5kLnRlc3QgYi90ZXN0cy9maW5kLnRlc3QKaW5kZXggNzFhNTUwMS4uZjQyNzczNyAxMDA3NTUKLS0tIGEvdGVzdHMvZmluZC50ZXN0CisrKyBiL3Rlc3RzL2ZpbmQudGVzdApAQCAtMTQyLDUgKzE0Miw2IEBACiAKIHRlc3RpbmcgIm9uZSBzbGFzaCIgJ2ZpbmQgL2V0Yy8gLW1heGRlcHRoIDEgfCBncmVwIC9wYXNzd2RcJCcgJy9ldGMvcGFzc3dkXG4nIFwKICAgJycgJycKK3Rlc3RpbmcgJ2VtcHR5IGFyZycgJ2ZpbmQgIiIgZGlyIC1uYW1lIGZpbGUgMj4vZGV2L251bGwnICdkaXIvZmlsZVxuJyAnJyAnJwogCiBybSAtcmYgZGlyCmRpZmYgLS1naXQgYS90ZXN0cy9ndW56aXAudGVzdCBiL3Rlc3RzL2d1bnppcC50ZXN0CmluZGV4IDlmOWVmNWUuLmJmOWI5ODMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2d1bnppcC50ZXN0CisrKyBiL3Rlc3RzL2d1bnppcC50ZXN0CkBAIC0yMSw2ICsyMSwxMyBAQAogICAgIHRlc3QgLWYgZi5neiAmJiBjYXQgZiIgImhlbGxvIHdvcmxkXG4iICIiICIiCiBybSAtZiBmIGYuZ3oKIAorIyB0ZXN0IEZFWFRSQSBzdXBwb3J0CitlY2hvICIxZjhiMDgwNDAwMDAwMDAwMDBmZjA0MDAwMDAwZmZmZjRiY2JjZmU3MDIwMGE4NjUzMjdlMDQwMDAwMDAiIHwgeHhkIC1yIC1wID4gZjEuZ3oKK3Rlc3RpbmcgIkZFWFRSQSBmbGFnIHNraXBwZWQgcHJvcGVybHkiICJndW56aXAgZjEuZ3ogJiYKKyAgICAhIHRlc3QgLWYgZjEuZ3ogJiYgdGVzdCAtZiBmMSAmJgorICAgIGNhdCBmMSIgImZvb1xuIiAiIiAiIgorcm0gLWYgZjEgZjEuZ3oKKwogIyAtYwlPdXRwdXQgdG8gc3Rkb3V0CiBlY2hvIC1uICJmb28gIiB8IGd6aXAgPiBmMS5negogZWNobyAiYmFyIiB8IGd6aXAgPiBmMi5negpkaWZmIC0tZ2l0IGEvdGVzdHMvaWQudGVzdCBiL3Rlc3RzL2lkLnRlc3QKaW5kZXggYjRiMTNhNi4uNWVhZTkyOCAxMDA3NTUKLS0tIGEvdGVzdHMvaWQudGVzdAorKysgYi90ZXN0cy9pZC50ZXN0CkBAIC01LDEzICs1LDE1IEBACiAjdGVzdGluZyAibmFtZSIgImNvbW1hbmQiICJyZXN1bHQiICJpbmZpbGUiICJzdGRpbiIKIAogIyBTeXN0ZW1zIHdpdGggU0VMaW51eCB3aWxsIGhhdmUgc2VjdXJpdHkgY29udGV4dCBjcnVmdCwKLSMgYW5kIEJTRHMgY2FsbCB0aGUgcm9vdCBncm91cCAid2hlZWwiIGluc3RlYWQuCi1DTEVBTj0ic2VkICdzLyBjb250ZXh0PS4qLy9nJyB8IHNlZCAncy93aGVlbC9yb290L2cnIgorIyBCU0RzIGNhbGwgdGhlIHJvb3QgZ3JvdXAgIndoZWVsIiBpbnN0ZWFkLAorIyBhbmQgUmFzcGJlcnJ5IFBpIE9TIGhhcyByb290IGFsc28gaW4gdGhlIDExNyhscGFkbWluKSBncm91cC4KK0NMRUFOPSJzZWQgJ3MvIGNvbnRleHQ9LiovL2cnIHwgc2VkICdzL3doZWVsL3Jvb3QvZycgfCBcCitzZWQgJ3MvMTE3Ly9nJyB8IHNlZCAtRSAncy9cKD9scGFkbWluXCk/Ly9nJyB8IHNlZCAncy9bICxdJC8vJyIKIAogdGVzdGluZyAiMCIgImlkIDAgfCAkQ0xFQU4iICJ1aWQ9MChyb290KSBnaWQ9MChyb290KSBncm91cHM9MChyb290KVxuIiAiIiAiIgogdGVzdGluZyAicm9vdCIgImlkIHJvb3QgfCAkQ0xFQU4iIFwKICAgInVpZD0wKHJvb3QpIGdpZD0wKHJvb3QpIGdyb3Vwcz0wKHJvb3QpXG4iICIiICIiCi10ZXN0aW5nICItRyByb290IiAiaWQgLUcgcm9vdCIgIjBcbiIgIiIgIiIKK3Rlc3RpbmcgIi1HIHJvb3QiICJpZCAtRyByb290IHwgJENMRUFOIiAiMFxuIiAiIiAiIgogdGVzdGluZyAiLW5HIHJvb3QiICJpZCAtbkcgcm9vdCB8ICRDTEVBTiIgInJvb3RcbiIgIiIgIiIKIHRlc3RpbmcgIi1nIHJvb3QiICJpZCAtZyByb290IiAiMFxuIiAiIiAiIgogdGVzdGluZyAiLW5nIHJvb3QiICJpZCAtbmcgcm9vdCB8ICRDTEVBTiIgInJvb3RcbiIgIiIgIiIKZGlmZiAtLWdpdCBhL3Rlc3RzL3NlZC50ZXN0IGIvdGVzdHMvc2VkLnRlc3QKaW5kZXggYmViMTFkNS4uYzM5MjhlNSAxMDA3NTUKLS0tIGEvdGVzdHMvc2VkLnRlc3QKKysrIGIvdGVzdHMvc2VkLnRlc3QKQEAgLTE4NSw2ICsxODUsOCBAQAogdGVzdGluZyAnXG4gdG9vIGhpZ2gnIFwKICAgICAnc2VkIC1FICJzLyguKikvXDIvcCIgMj4vZGV2L251bGwgfHwgZWNobyBPSycgIk9LXG4iICIiICJmb28iCiAKK3RveW9ubHkgdGVzdGluZyAncy8vL3gnICdzZWQgInMvKGhlbGxvICk/KHdvcmxkKS9cMi94IicgIndvcmxkIiAiIiAiaGVsbG8gd29ybGQiCisKICMgUGVyZm9ybWFuY2UgdGVzdAogWD14OyBZPTIwOyB3aGlsZSBbICRZIC1ndCAwIF07IGRvIFg9JFgkWDsgWT0kKCgkWS0xKSk7IGRvbmUKIHRlc3RpbmcgJ21lZ2FieXRlIHMveC95L2cgKDIwIHNlYyB0aW1lb3V0KScgXApkaWZmIC0tZ2l0IGEvdGVzdHMvc2VxLnRlc3QgYi90ZXN0cy9zZXEudGVzdAppbmRleCAxNWEyMDhiLi4wNWQ5YjFlIDEwMDc1NQotLS0gYS90ZXN0cy9zZXEudGVzdAorKysgYi90ZXN0cy9zZXEudGVzdApAQCAtNjksMyArNjksOCBAQAogCiAjIFRPRE86IGJ1c3lib3ggZmFpbHMgdGhpcyB0b28sIGJ1dCBHTlUgc2VlbXMgdG8gbm90IHVzZSBkb3VibGUgZm9yIGxhcmdlIGludHMuCiAjdGVzdGluZyAidG9vIGxhcmdlIGZvciBkb3VibGUiICJzZXEgLXMsIDkwMDcxOTkyNTQ3NDA5OTEgMSA5MDA3MTk5MjU0NzQwOTkyIiAiOTAwNzE5OTI1NDc0MDk5MlxuIiAiIiAiIgorCit0ZXN0aW5nICJJTlRfTUlOIiAic2VxIC0yMTQ3NDgzNjQ4IC0yMTQ3NDgzNjQ3IiAiLTIxNDc0ODM2NDhcbi0yMTQ3NDgzNjQ3XG4iXAorICAiIiAiIgorCit0ZXN0aW5nICJmYXN0IHBhdGgiICJ0aW1lb3V0IDEwIHNlcSAxMDAwMDAwMCA+IC9kZXYvbnVsbCIgIiIgIiIgIiIKZGlmZiAtLWdpdCBhL3Rlc3RzL3NoLnRlc3QgYi90ZXN0cy9zaC50ZXN0CmluZGV4IDY3OTIxYzEuLjFkMDIxYWMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3NoLnRlc3QKKysrIGIvdGVzdHMvc2gudGVzdApAQCAtMTA3LDYgKzEwNyw5IEBACiB0ZXN0aW5nICJsZWFkaW5nIGFzc2lnbm1lbnQgZmFpbCIgXAogICAieyBcJFNIIC1jICdYPVwke2E/YmxhaH0gPiB3YWxyb2lkJztscyB3YWxyb2lkO30gMj4vZGV2L251bGwiICcnICcnICcnCiAKK3Rlc3RpbmcgImxpbmVubyIgIiRTSCBpbnB1dCIgIjUgb25lXG42IG9uZVxuNSB0d29cbjYgdHdvXG4iIFwKKyAgJyMhL2Jpbi9iYXNoXG5cbmZvciBpIGluIG9uZSB0d29cbmRvXG4gIGVjaG8gJExJTkVOTyAkaVxuICBlY2hvICRMSU5FTk8gJGlcbmRvbmVcbicgIiIKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBDaGFuZ2UgRVZBTCB0byBjYWxsIHNoIC1jIGZvciB1cywgdXNpbmcgImJhc2giIGV4cGxpY2l0bHkgZm9yIHRoZSBob3N0LgogZXhwb3J0IEVWQUw9IiRTSCAtYyIKQEAgLTE5MSw2ICsxOTQsOCBAQAogdGVzdGluZyAnJCgoICkgKScgJ2VjaG8gYWIkKChlY2hvIGhlbGxvKSB8IHRyIGUgeCljZCcgImFiaHhsbG9jZFxuIiAiIiAiIgogdGVzdGluZyAnJCgoeD15KSkgbGlmZXRpbWUnICdhPWJvaW5nOyBlY2hvICRhICRhJCgoYT00KSkkYSAkYScgJ2JvaW5nIGJvaW5nNDQgNFxuJyAnJyAnJwogCit0ZXN0aW5nICdxdW90ZScgImVjaG8gXCInXCIiICInXG4iICIiICIiCisKICMgTG9vcHMgYW5kIGZsb3cgY29udHJvbAogdGVzdGluZyAiY2FzZSIgJ2ZvciBpIGluIEEgQyBKIEI7IGRvIGNhc2UgIiRpIiBpbiBBKSBlY2hvIGdvdCBBIDs7IEIpIGVjaG8gYW5kIEIgOzsgQykgZWNobyB0aGVuIEMgOzsgKikgZWNobyBkZWZhdWx0IDs7IGVzYWM7IGRvbmUnIFwKICAgImdvdCBBXG50aGVuIENcbmRlZmF1bHRcbmFuZCBCXG4iICIiICIiCmRpZmYgLS1naXQgYS90ZXN0cy90ZXN0LnRlc3QgYi90ZXN0cy90ZXN0LnRlc3QKaW5kZXggN2Y1NzRmMC4uMTI5NWJlNCAxMDA2NDQKLS0tIGEvdGVzdHMvdGVzdC50ZXN0CisrKyBiL3Rlc3RzL3Rlc3QudGVzdApAQCAtNDIsNyArNDIsMzIgQEAKIHJtIGYgTCBzIHAKIHJtZGlyIGQKIAotIyBUT0RPOiBUZXN0IHJ3eCBndSB0CisjIHRlc3QgLXJ3eCBlYWNoIGJpdCBwb3NpdGlvbiBhbmQgZmFpbHVyZQordG91Y2ggd2FscnVzCitNQVNLPTExMQorZm9yIGkgaW4geCB3IHIgayBnIHU7IGRvCisgIFsgJGkgPT0gayBdICYmIE1BU0s9MTAwMAorICAjIHRlc3QgZXZlcnl0aGluZyBvZmYgcHJvZHVjZXMgIm9mZiIKKyAgY2htb2QgMDAwIHdhbHJ1cworICB0ZXN0Y21kICItJGkgMCIgIi0kaSB3YWxydXMgfHwgZWNobyB5ZXMiICJ5ZXNcbiIgIiIgIiIKKyAgY2htb2QgJCgoNzc3Ny0kTUFTSykpIHdhbHJ1cworICB0ZXN0Y21kICItJGkgaW52ZXJ0ZWQiICItJGkgd2FscnVzIHx8IGVjaG8geWVzIiAieWVzXG4iICIiICIiCisgIE1BU0s9JCgoJE1BU0s8PDEpKQorZG9uZQordW5zZXQgTUFTSworIyBUZXN0IHNldHVpZCBzZXRnaWQgc3RpY2t5IGVuYWJsZWQKK2ZvciBpIGluIHV1K3MgZ2crcyBrK3Q7IGRvCisgIGNobW9kIDAwMCB3YWxydXMKKyAgY2htb2QgJHtpOjF9K3Mgd2FscnVzCisgIHRlc3RjbWQgIi0ke2k6MDoxfSIgIi0ke2k6MDoxfSB3YWxydXMgJiYgZWNobyB5ZXMiICJ5ZXNcbiIgIiIgIiIKK2RvbmUKKyMgdGVzdCBlYWNoIHVnbytyd3ggYml0IHBvc2l0aW9uIGluZGl2aWR1YWxseQorZm9yIGkgaW4gMSAxMCAxMDA7IGRvIGZvciBqIGluIHggdyByOyBkbworICBjaG1vZCAkaSB3YWxydXMKKyAgdGVzdGNtZCAiLSRqICRpIiAiLSRqIHdhbHJ1cyAmJiBlY2hvIHllcyIgInllc1xuIiAiIiAiIgorICBpPSQoKGk8PDEpKQorZG9uZTsgZG9uZQorcm0gLWYgd2FscnVzCiAKIHRlc3RjbWQgIiIgIicnIHx8IGVjaG8geWVzIiAieWVzXG4iICIiICIiCiB0ZXN0Y21kICIiICJhICYmIGVjaG8geWVzIiAieWVzXG4iICIiICIiCmRpZmYgLS1naXQgYS90ZXN0cy90ci50ZXN0IGIvdGVzdHMvdHIudGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjAwYTNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdHIudGVzdApAQCAtMCwwICsxLDExIEBACisjIS9iaW4vYmFzaAorCitbIC1mIHRlc3Rpbmcuc2ggXSAmJiAuIHRlc3Rpbmcuc2gKKworI3Rlc3RpbmcgIm5hbWUiICJjb21tYW5kIiAicmVzdWx0IiAiaW5maWxlIiAic3RkaW4iCisKK3Rlc3RpbmcgIiIgInRyIDEgMiIgIjIyMzIyMzIyMyIgIiIgIjEyMzEyMzEyMyIKK3Rlc3RpbmcgIi1kIiAidHIgLWQgMSIgIjIzMjMyMyIgIiIgIjEyMzEyMzEyMyIKK3Rlc3RpbmcgIi1zIiAidHIgLXMgMSIgIjEyMjIzMzMxMjIyMzMzIiAiIiAiMTExMjIyMzMzMTExMjIyMzMzIgorCit0ZXN0aW5nICJubyBwYXRob2xvZ2ljYWwgZmx1c2hpbmciICJzZXEgMTAwMDAwMDAgfCB0ciAxIDIgPiAvZGV2L251bGwiICIiICIiICIiCmRpZmYgLS1naXQgYS90ZXN0cy91bmljb2RlLnRlc3QgYi90ZXN0cy91bmljb2RlLnRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDk5MjMxZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3VuaWNvZGUudGVzdApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vYmFzaAorCitbIC1mIHRlc3Rpbmcuc2ggXSAmJiAuIHRlc3Rpbmcuc2gKKworI3Rlc3RpbmcgIm5hbWUiICJjb21tYW5kIiAicmVzdWx0IiAiaW5maWxlIiAic3RkaW4iCisKK3Rlc3RpbmcgInRleHQiICJ1bmljb2RlIOyViOuFlSBoaSIgIlUrQzU0OCA6IOyViCA6IDB4ZWMgMHg5NSAweDg4XG5VK0IxNTUgOiDrhZUgOiAweGViIDB4ODUgMHg5NVxuVSswMDY4IDogaFxuVSswMDY5IDogaVxuIiAiIiAiIgordGVzdGluZyAiY29kZSBwb2ludHMiICJ1bmljb2RlIDcwIDY2NiIgIlUrMDA3MCA6IHBcblUrMDY2NiA6INmmIDogMHhkOSAweGE2XG4iICIiICIiCit0ZXN0aW5nICJBU0NJSSBjb250cm9scyIgInVuaWNvZGUgMCIgIlUrMDAwMCA6IE5VTFxuIiAiIiAiIgordGVzdGluZyAiZGVsIiAidW5pY29kZSA3ZiIgIlUrMDA3RiA6IERFTFxuIiAiIiAiIgordGVzdGluZyAiMy1ieXRlIiAidW5pY29kZSAzMGI5IiAiVSszMEI5IDog44K5IDogMHhlMyAweDgyIDB4YjlcbiIgIiIgIiIKK3Rlc3RpbmcgIjQtYnl0ZSIgInVuaWNvZGUgMTAwMDAiICJVKzEwMDAwIDog8JCAgCA6IDB4ZjAgMHg5MCAweDgwIDB4ODBcbiIgIiIgIiIKK3Rlc3RpbmcgInJhbmdlIiAidW5pY29kZSA2NjAtNjYyIiAiVSswNjYwIDog2aAgOiAweGQ5IDB4YTBcblUrMDY2MSA6INmhIDogMHhkOSAweGExXG5VKzA2NjIgOiDZoiA6IDB4ZDkgMHhhMlxuIiAiIiAiIgpkaWZmIC0tZ2l0IGEvdG95cy5oIGIvdG95cy5oCmluZGV4IGIyZTQ3MjEuLmVhZDM5YjUgMTAwNjQ0Ci0tLSBhL3RveXMuaAorKysgYi90b3lzLmgKQEAgLTU4LDYgKzU4LDcgQEAKIAogLy8gSW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCAoYWxzbyBpbiBQT1NJWCBhbmQgTFNCKQogCisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KICNpbmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDx3Y2hhci5oPgogI2luY2x1ZGUgPHdjdHlwZS5oPgpkaWZmIC0tZ2l0IGEvdG95cy9leGFtcGxlL2RlbW9fdXRmOHRvd2MuYyBiL3RveXMvZXhhbXBsZS9kZW1vX3V0Zjh0b3djLmMKaW5kZXggMjU3Mzc4NS4uYzA1MjI1NCAxMDA2NDQKLS0tIGEvdG95cy9leGFtcGxlL2RlbW9fdXRmOHRvd2MuYworKysgYi90b3lzL2V4YW1wbGUvZGVtb191dGY4dG93Yy5jCkBAIC02LDcgKzYsNiBAQAogCiBjb25maWcgREVNT19VVEY4VE9XQwogICBib29sICJkZW1vX3V0Zjh0b3djIgotICBkZXBlbmRzIG9uIFRPWUJPWF9JMThOCiAgIGRlZmF1bHQgbgogICBoZWxwCiAgICAgdXNhZ2U6IGRlbW9fdXRmOHRvd2MKZGlmZiAtLWdpdCBhL3RveXMvbHNiL3NlcS5jIGIvdG95cy9sc2Ivc2VxLmMKaW5kZXggOTg4NDY2Yi4uYmVlYWVkMyAxMDA2NDQKLS0tIGEvdG95cy9sc2Ivc2VxLmMKKysrIGIvdG95cy9sc2Ivc2VxLmMKQEAgLTI4LDcgKzI4LDcgQEAKIEdMT0JBTFMoCiAgIGNoYXIgKnMsICpmOwogCi0gIGludCBwcmVjaXNpb247CisgIGludCBwcmVjaXNpb24sIGJ1ZmxlbjsKICkKIAogLy8gRW5zdXJlIHRoZXJlJ3Mgb25lICVmIGVzY2FwZSB3aXRoIGNvcnJlY3QgYXR0cmlidXRlcwpAQCAtMzcsMTAgKzM3LDggQEAKICAgY2hhciAqcyA9IG5leHRfcHJpbnRmKGYsIDApOwogCiAgIGlmICghcykgZXJyb3JfZXhpdCgiYmFkIC1mIG5vICUlZiIpOwotICBpZiAoLTEgPT0gc3RyaWR4KCJhQWVFZkZnRyIsICpzKSB8fCAocyA9IG5leHRfcHJpbnRmKHMsIDApKSkgewotICAgIC8vIFRoZSBAIGlzIGEgYnl0ZSBvZmZzZXQsIG5vdCB1dGY4IGNoYXJzLiBXYWl0aW5nIGZvciBzb21lYm9keSB0byBjb21wbGFpbi4KKyAgaWYgKC0xID09IHN0cmlkeCgiYUFlRWZGZ0ciLCAqcykgfHwgKHMgPSBuZXh0X3ByaW50ZihzLCAwKSkpCiAgICAgZXJyb3JfZXhpdCgiYmFkIC1mICclcydAJWQiLCBmLCAoaW50KShzLWYrMSkpOwotICB9CiB9CiAKIC8vIFBhcnNlIGEgbnVtZXJpYyBhcmd1bWVudCBzZXR0aW5nICpwcmVjIHRvIHRoZSBwcmVjaXNpb24gb2YgdGhpcyBhcmd1bWVudC4KQEAgLTU0LDExICs1MiwzOSBAQAogICByZXR1cm4geHN0cnRvZChzKTsKIH0KIAorLy8gZmFzdCBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gZGVjaW1hbCBzdHJpbmcKK2NoYXIgKml0b2EoY2hhciAqcywgaW50IGkpCit7CisgIGNoYXIgYnVmWzE2XSwgKmZmID0gYnVmOworICB1bnNpZ25lZCBuID0gaTsKKworICBpZiAoaTwwKSB7CisgICAgKnMrKyA9ICctJzsKKyAgICBuID0gLWk7CisgIH0KKyAgZG8gKmZmKysgPSAnMCcrbiUxMDsgd2hpbGUgKChuIC89IDEwKSk7CisgIGRvICpzKysgPSAqLS1mZjsgd2hpbGUgKGZmPmJ1Zik7CisgICpzKysgPSAnXG4nOworCisgIHJldHVybiBzOworfQorCitjaGFyICpmbHVzaF90b3lidWYoY2hhciAqc3MpCit7CisgIGlmIChzcy10b3lidWY8VFQuYnVmbGVuKSByZXR1cm4gc3M7CisKKyAgeHdyaXRlKDEsIHRveWJ1Ziwgc3MtdG95YnVmKTsgCisKKyAgcmV0dXJuIHRveWJ1ZjsKK30KKwogdm9pZCBzZXFfbWFpbih2b2lkKQogeworICBjaGFyIGZidWZbMzJdLCAqc3M7CiAgIGRvdWJsZSBmaXJzdCA9IDEsIGluY3JlbWVudCA9IDEsIGxhc3QsIGRkOwotICBpbnQgaTsKKyAgaW50IGlpLCBpbmMgPSAxLCBsZW4sIHNsZW47CiAKKyAgLy8gcGFyc2UgYXJndW1lbnRzCiAgIGlmICghVFQucykgVFQucyA9ICJcbiI7CiAgIHN3aXRjaCAodG95cy5vcHRjKSB7CiAgICAgY2FzZSAzOiBpbmNyZW1lbnQgPSBwYXJzZWYodG95cy5vcHRhcmdzWzFdKTsKQEAgLTY2LDE5ICs5MiwzMiBAQAogICAgIGRlZmF1bHQ6IGxhc3QgPSBwYXJzZWYodG95cy5vcHRhcmdzW3RveXMub3B0Yy0xXSk7CiAgIH0KIAotICAvLyBQcmVwYXJlIGZvcm1hdCBzdHJpbmcgd2l0aCBhcHByb3ByaWF0ZSBwcmVjaXNpb24uIENhbid0IHVzZSAlZyBiZWNhdXNlIDFlNgotICBpZiAodG95cy5vcHRmbGFncyAmIEZMQUdfZikgaW5zYW5pdGl6ZShUVC5mKTsKLSAgZWxzZSBzcHJpbnRmKFRULmYgPSB0b3lidWYsICIlJS4lZGYiLCBUVC5wcmVjaXNpb24pOworICAvLyBtZWFzdXJlIGFyZ3VtZW50cworICBpZiAoRkxBRyhmKSkgaW5zYW5pdGl6ZShUVC5mKTsKKyAgZm9yIChpaSA9IGxlbiA9IDA7IGlpPDM7IGlpKyspIHsKKyAgICBkZCA9IChkb3VibGUgW10pe2ZpcnN0LCBpbmNyZW1lbnQsIGxhc3R9W2lpXTsKKyAgICBsZW4gPSBtYXhvZihsZW4sIHNucHJpbnRmKDAsIDAsICIlLipmIiwgVFQucHJlY2lzaW9uLCBmYWJzKGRkKSkpOworICAgIGlmIChpaSA9PSAyKSBkZCArPSBpbmNyZW1lbnQ7CisgICAgc2xlbiA9IGRkOworICAgIGlmIChkZCAhPSBzbGVuKSBpbmMgPSAwOworICB9CisgIGlmICghRkxBRyhmKSkgc3ByaW50ZihUVC5mID0gZmJ1ZiwgIiUlMCVkLiVkZiIsIGxlbiwgVFQucHJlY2lzaW9uKTsKKyAgVFQuYnVmbGVuID0gc2l6ZW9mKHRveWJ1ZikgLSAzMiAtIGxlbiAtIFRULnByZWNpc2lvbiAtIHN0cmxlbihUVC5zKTsKKyAgaWYgKFRULmJ1ZmxlbjwwKSBlcnJvcl9leGl0KCJiYWQgLXMiKTsKIAotICAvLyBQYWQgdG8gbGFyZ2VzdCB3aWR0aAotICBpZiAodG95cy5vcHRmbGFncyAmIEZMQUdfdykgewotICAgIGludCBsZW4gPSAwOworICAvLyBmYXN0IHBhdGg6IHdoZW4gZXZlcnl0aGluZyBmaXRzIGluIGFuIGludCB3aXRoIG5vIGZsYWdzLgorICBpZiAoIXRveXMub3B0ZmxhZ3MgJiYgaW5jKSB7CisgICAgaWkgPSBmaXJzdDsKKyAgICBsZW4gPSBsYXN0OworICAgIGluYyA9IGluY3JlbWVudDsKKyAgICBzcyA9IHRveWJ1ZjsKKyAgICBpZiAoaW5jPjApIGZvciAoOyBpaTw9bGVuOyBpaSArPSBpbmMpCisgICAgICBzcyA9IGZsdXNoX3RveWJ1ZihpdG9hKHNzLCBpaSkpOworICAgIGVsc2UgaWYgKGluYzwwKSBmb3IgKDsgaWk+PWxlbjsgaWkgKz0gaW5jKQorICAgICAgc3MgPSBmbHVzaF90b3lidWYoaXRvYShzcywgaWkpKTsKKyAgICBpZiAoc3MgIT0gdG95YnVmKSB4d3JpdGUoMSwgdG95YnVmLCBzcy10b3lidWYpOwogCi0gICAgZm9yIChpPTA7IGk8MzsgaSsrKSB7Ci0gICAgICBkZCA9IChkb3VibGUgW10pe2ZpcnN0LCBpbmNyZW1lbnQsIGxhc3R9W2ldOwotICAgICAgbGVuID0gbWF4b2YobGVuLCBzbnByaW50ZigwLCAwLCBUVC5mLCBkZCkpOwotICAgIH0KLSAgICBzcHJpbnRmKFRULmYgPSB0b3lidWYsICIlJTAlZC4lZGYiLCBsZW4sIFRULnByZWNpc2lvbik7CisgICAgcmV0dXJuOwogICB9CiAKICAgLy8gT3RoZXIgaW1wbGVtZW50YXRpb25zIG91dHB1dCBub3RoaW5nIGlmIGluY3JlbWVudCBpcyAwIGFuZCBmaXJzdCA+IGxhc3QsCkBAIC04NiwxNCArMTI1LDE0IEBACiAgIC8vIG5vdGhpbmcgZm9yIGFsbCB0aHJlZSwgaWYgeW91IHdhbnQgZW5kbGVzcyBvdXRwdXQgdXNlICJ5ZXMiLgogICBpZiAoIWluY3JlbWVudCkgcmV0dXJuOwogCi0gIGkgPSAwOwotICBmb3IgKDs7KSB7CisgIC8vIFNsb3cgcGF0aCwgZmxvYXRpbmcgcG9pbnQgYW5kIGZhbmN5IHNwcmludGYoKSBwYXR0ZXJucworICBmb3IgKGlpID0gMCwgc3MgPSB0b3lidWY7OyBpaSsrKSB7CiAgICAgLy8gTXVsdGlwbHkgdG8gYXZvaWQgYWNjdW11bGF0aW5nIHJvdW5kaW5nIGVycm9ycyBmcm9tIGluY3JlbWVudC4KLSAgICBkZCA9IGZpcnN0K2kqaW5jcmVtZW50OworICAgIGRkID0gZmlyc3QraWkqaW5jcmVtZW50OwogICAgIGlmICgoaW5jcmVtZW50PDAgJiYgZGQ8bGFzdCkgfHwgKGluY3JlbWVudD4wICYmIGRkPmxhc3QpKSBicmVhazsKLSAgICBpZiAoaSsrKSBwcmludGYoIiVzIiwgVFQucyk7Ci0gICAgcHJpbnRmKFRULmYsIGRkKTsKKyAgICBpZiAoaWkpIHNzID0gZmx1c2hfdG95YnVmKHN0cGNweShzcywgVFQucykpOworICAgIHNzICs9IHNwcmludGYoc3MsIFRULmYsIGRkKTsKICAgfQotCi0gIGlmIChpKSBwcmludGYoIlxuIik7CisgICpzcysrID0gJ1xuJzsKKyAgeHdyaXRlKDEsIHRveWJ1Ziwgc3MtdG95YnVmKTsKIH0KZGlmZiAtLWdpdCBhL3RveXMvbmV0L21pY3JvY29tLmMgYi90b3lzL25ldC9taWNyb2NvbS5jCmluZGV4IDYyYjAyMGYuLjk2MzQ0NWMgMTAwNjQ0Ci0tLSBhL3RveXMvbmV0L21pY3JvY29tLmMKKysrIGIvdG95cy9uZXQvbWljcm9jb20uYwpAQCAtMjIsMzAgKzIyLDM1IEBACiBHTE9CQUxTKAogICBsb25nIHM7CiAKLSAgaW50IGZkOwotICBzdHJ1Y3QgdGVybWlvcyBvcmlnaW5hbF9zdGRpbl9zdGF0ZSwgb3JpZ2luYWxfZmRfc3RhdGU7CisgIGludCBmZCwgc3RvazsKKyAgc3RydWN0IHRlcm1pb3Mgb2xkX3N0ZGluLCBvbGRfZmQ7CiApCiAKIC8vIFRPRE86IHR0eV9zaWdyZXNldCBvdXRwdXRzIGFuc2kgZXNjYXBlIHNlcXVlbmNlcywgaG93IHRvIGRpc2FibGU/CiBzdGF0aWMgdm9pZCByZXN0b3JlX3N0YXRlcyhpbnQgaSkKIHsKLSAgdGNzZXRhdHRyKDAsIFRDU0FGTFVTSCwgJlRULm9yaWdpbmFsX3N0ZGluX3N0YXRlKTsKLSAgdGNzZXRhdHRyKFRULmZkLCBUQ1NBRkxVU0gsICZUVC5vcmlnaW5hbF9mZF9zdGF0ZSk7CisgIGlmIChUVC5zdG9rKSB0Y3NldGF0dHIoMCwgVENTQUZMVVNILCAmVFQub2xkX3N0ZGluKTsKKyAgdGNzZXRhdHRyKFRULmZkLCBUQ1NBRkxVU0gsICZUVC5vbGRfZmQpOwogfQogCiB2b2lkIG1pY3JvY29tX21haW4odm9pZCkKIHsKKyAgc3RydWN0IHRlcm1pb3MgdGlvOwogICBzdHJ1Y3QgcG9sbGZkIGZkc1syXTsKICAgaW50IGk7CiAKICAgLy8gT3BlbiB3aXRoIE9fTkRFTEFZLCBidXQgc3dpdGNoIGJhY2sgdG8gYmxvY2tpbmcgZm9yIHJlYWRzLgogICBUVC5mZCA9IHhvcGVuKCp0b3lzLm9wdGFyZ3MsIE9fUkRXUiB8IE9fTk9DVFRZIHwgT19OREVMQVkpOwotICBpZiAoLTE9PShpID0gZmNudGwoVFQuZmQsIEZfR0VURkwsIDApKSB8fCBmY250bChUVC5mZCwgRl9TRVRGTCwgaSZ+T19OREVMQVkpKQorICBpZiAoLTE9PShpID0gZmNudGwoVFQuZmQsIEZfR0VURkwsIDApKSB8fCBmY250bChUVC5mZCwgRl9TRVRGTCwgaSZ+T19OREVMQVkpCisgICAgICB8fCB0Y2dldGF0dHIoVFQuZmQsICZUVC5vbGRfZmQpKQogICAgIHBlcnJvcl9leGl0X3JhdygqdG95cy5vcHRhcmdzKTsKIAogICAvLyBTZXQgYm90aCBpbnB1dCBhbmQgb3V0cHV0IHRvIHJhdyBtb2RlLgotICB4c2V0X3Rlcm1pbmFsKFRULmZkLCAxLCBUVC5zLCAmVFQub3JpZ2luYWxfZmRfc3RhdGUpOwotICBzZXRfdGVybWluYWwoMCwgMSwgMCwgJlRULm9yaWdpbmFsX3N0ZGluX3N0YXRlKTsKKyAgbWVtY3B5KCZ0aW8sICZUVC5vbGRfZmQsIHNpemVvZihzdHJ1Y3QgdGVybWlvcykpOworICBjZm1ha2VyYXcoJnRpbyk7CisgIHhzZXRzcGVlZCgmdGlvLCBUVC5zKTsKKyAgaWYgKHRjc2V0YXR0cihUVC5mZCwgVENTQUZMVVNILCAmdGlvKSkgcGVycm9yX2V4aXQoInNldCBzcGVlZCIpOworICBpZiAoIXNldF90ZXJtaW5hbCgwLCAxLCAwLCAmVFQub2xkX3N0ZGluKSkgVFQuc3RvaysrOwogICAvLyAuLi5hbmQgYXJyYW5nZSB0byByZXN0b3JlIHRoaW5ncywgaG93ZXZlciB3ZSBtYXkgZXhpdC4KICAgc2lnYXRleGl0KHJlc3RvcmVfc3RhdGVzKTsKIApkaWZmIC0tZ2l0IGEvdG95cy9vdGhlci9iYXNlNjQuYyBiL3RveXMvb3RoZXIvYmFzZTY0LmMKaW5kZXggZWY3ODU0YS4uMjVlMzdkNCAxMDA2NDQKLS0tIGEvdG95cy9vdGhlci9iYXNlNjQuYworKysgYi90b3lzL290aGVyL2Jhc2U2NC5jCkBAIC01LDYgKzUsNyBAQAogICogTm8gc3RhbmRhcmQKIAogVVNFX0JBU0U2NChORVdUT1koYmFzZTY0LCAiZGl3IzwwPTc2WyFkd10iLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCitVU0VfQkFTRTMyKE5FV1RPWShiYXNlMzIsICJkaXcjPDA9NzZbIWR3XSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKIAogY29uZmlnIEJBU0U2NAogICBib29sICJiYXNlNjQiCkBAIC0xNyw2ICsxOCwxOCBAQAogICAgIC1kCURlY29kZQogICAgIC1pCUlnbm9yZSBub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXJzCiAgICAgLXcJV3JhcCBvdXRwdXQgYXQgQ09MVU1OUyAoZGVmYXVsdCA3NiBvciAwIGZvciBubyB3cmFwKQorCitjb25maWcgQkFTRTMyCisgIGJvb2wgImJhc2UzMiIKKyAgZGVmYXVsdCB5CisgIGhlbHAKKyAgICB1c2FnZTogYmFzZTMyIFstZGldIFstdyBDT0xVTU5TXSBbRklMRS4uLl0KKworICAgIEVuY29kZSBvciBkZWNvZGUgaW4gYmFzZTMyLgorCisgICAgLWQJRGVjb2RlCisgICAgLWkJSWdub3JlIG5vbi1hbHBoYWJldGljIGNoYXJhY3RlcnMKKyAgICAtdwlXcmFwIG91dHB1dCBhdCBDT0xVTU5TIChkZWZhdWx0IDc2IG9yIDAgZm9yIG5vIHdyYXApCiAqLwogCiAjZGVmaW5lIEZPUl9iYXNlNjQKQEAgLTI0LDggKzM3LDkgQEAKIAogR0xPQkFMUygKICAgbG9uZyB3OwotCiAgIHVuc2lnbmVkIHRvdGFsOworICB1bnNpZ25lZCBuOyAgLy8gbnVtYmVyIG9mIGJpdHMgdXNlZCBpbiBlbmNvZGluZy4gNSBmb3IgYmFzZTMyLCA2IGZvciBiYXNlNjQKKyAgdW5zaWduZWQgYWxpZ247ICAvLyBudW1iZXIgb2YgYml0cyB0byBhbGlnbiB0bwogKQogCiBzdGF0aWMgdm9pZCB3cmFwdXRjaGFyKGludCBjLCBpbnQgKngpCkBAIC0zOCw3ICs1Miw3IEBACiAgIH07CiB9CiAKLXN0YXRpYyB2b2lkIGRvX2Jhc2U2NChpbnQgZmQsIGNoYXIgKm5hbWUpCitzdGF0aWMgdm9pZCBkb19iYXNlX24oaW50IGZkLCBjaGFyICpuYW1lKQogewogICBpbnQgb3V0ID0gMCwgYml0cyA9IDAsIHggPSAwLCBpLCBsZW47CiAgIGNoYXIgKmJ1ZiA9IHRveWJ1ZisxMjg7CkBAIC00OSw4ICs2Myw4IEBACiAgICAgLy8gSWYgbm8gbW9yZSBkYXRhLCBmbHVzaCBidWZmZXIKICAgICBpZiAoIShsZW4gPSB4cmVhZChmZCwgYnVmLCBzaXplb2YodG95YnVmKS0xMjgpKSkgewogICAgICAgaWYgKCFGTEFHKGQpKSB7Ci0gICAgICAgIGlmIChiaXRzKSB3cmFwdXRjaGFyKHRveWJ1ZltvdXQ8PCg2LWJpdHMpXSwgJngpOwotICAgICAgICB3aGlsZSAoVFQudG90YWwmMykgd3JhcHV0Y2hhcignPScsICZ4KTsKKyAgICAgICAgaWYgKGJpdHMpIHdyYXB1dGNoYXIodG95YnVmW291dDw8KFRULm4tYml0cyldLCAmeCk7CisgICAgICAgIHdoaWxlIChUVC50b3RhbCZUVC5hbGlnbikgd3JhcHV0Y2hhcignPScsICZ4KTsKICAgICAgICAgaWYgKHgpIHhwdXRjKCdcbicpOwogICAgICAgfQogCkBAIC02Miw4ICs3Niw4IEBACiAgICAgICAgIGlmIChidWZbaV0gPT0gJz0nKSByZXR1cm47CiAKICAgICAgICAgaWYgKCh4ID0gc3RyaWR4KHRveWJ1ZiwgYnVmW2ldKSkgIT0gLTEpIHsKLSAgICAgICAgICBvdXQgPSAob3V0PDw2KSArIHg7Ci0gICAgICAgICAgYml0cyArPSA2OworICAgICAgICAgIG91dCA9IChvdXQ8PFRULm4pICsgeDsKKyAgICAgICAgICBiaXRzICs9IFRULm47CiAgICAgICAgICAgaWYgKGJpdHMgPj0gOCkgewogICAgICAgICAgICAgcHV0Y2hhcihvdXQgPj4gKGJpdHMgLT0gOCkpOwogICAgICAgICAgICAgb3V0ICY9ICgxPDxiaXRzKS0xOwpAQCAtNzgsOCArOTIsOCBAQAogICAgICAgfSBlbHNlIHsKICAgICAgICAgb3V0ID0gKG91dDw8OCkgKyBidWZbaV07CiAgICAgICAgIGJpdHMgKz0gODsKLSAgICAgICAgd2hpbGUgKGJpdHMgPj0gNikgewotICAgICAgICAgIHdyYXB1dGNoYXIodG95YnVmW291dCA+PiAoYml0cyAtPSA2KV0sICZ4KTsKKyAgICAgICAgd2hpbGUgKGJpdHMgPj0gVFQubikgeworICAgICAgICAgIHdyYXB1dGNoYXIodG95YnVmW291dCA+PiAoYml0cyAtPSBUVC5uKV0sICZ4KTsKICAgICAgICAgICBvdXQgJj0gKDE8PGJpdHMpLTE7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTg5LDYgKzEwMywyMCBAQAogCiB2b2lkIGJhc2U2NF9tYWluKHZvaWQpCiB7CisgIFRULm4gPSA2OworICBUVC5hbGlnbiA9IDM7CiAgIGJhc2U2NF9pbml0KHRveWJ1Zik7Ci0gIGxvb3BmaWxlcyh0b3lzLm9wdGFyZ3MsIGRvX2Jhc2U2NCk7CisgIGxvb3BmaWxlcyh0b3lzLm9wdGFyZ3MsIGRvX2Jhc2Vfbik7Cit9CisKKyNkZWZpbmUgQ0xFQU5VUF9iYXNlNjQKKyNkZWZpbmUgRk9SX2Jhc2UzMgorI2luY2x1ZGUgImdlbmVyYXRlZC9mbGFncy5oIgorCit2b2lkIGJhc2UzMl9tYWluKHZvaWQpCit7CisgIFRULm4gPSA1OworICBUVC5hbGlnbiA9IDc7CisgIGJhc2UzMl9pbml0KHRveWJ1Zik7CisgIGxvb3BmaWxlcyh0b3lzLm9wdGFyZ3MsIGRvX2Jhc2Vfbik7CiB9CmRpZmYgLS1naXQgYS90b3lzL290aGVyL2NvdW50LmMgYi90b3lzL290aGVyL2NvdW50LmMKaW5kZXggZjNiNmY4Mi4uM2QzODhlNyAxMDA2NDQKLS0tIGEvdG95cy9vdGhlci9jb3VudC5jCisrKyBiL3RveXMvb3RoZXIvY291bnQuYwpAQCAtMTcsMTYgKzE3LDIyIEBACiAKIHZvaWQgY291bnRfbWFpbih2b2lkKQogewotICB1aW50NjRfdCBzaXplID0gMDsKKyAgc3RydWN0IHBvbGxmZCBwZmQgPSB7MCwgUE9MTElOLCAwfTsKKyAgdW5zaWduZWQgbG9uZyBsb25nIHNpemUgPSAwLCBsYXN0ID0gMCwgdGhlbiA9IDAsIG5vdzsKKyAgY2hhciAqYnVmID0geG1hbGxvYyg2NTUzNik7CiAgIGludCBsZW47Ci0gIGNoYXIgYnVmWzMyXTsKIAorICAvLyBwb2xsLCBwcmludCBpZiBkYXRhIG5vdCByZWFkeSwgdXBkYXRlIDR4L3NlY29uZCBvdGhlcndpc2UKICAgZm9yICg7OykgewotICAgIGxlbiA9IHhyZWFkKDAsIHRveWJ1Ziwgc2l6ZW9mKHRveWJ1ZikpOworICAgIGlmICghKGxlbiA9IHBvbGwoJnBmZCwgMSwgKGxhc3QgIT0gc2l6ZSkgPyAyNTAgOiAwKSkpIGNvbnRpbnVlOworICAgIGlmIChsZW48MCAmJiBlcnJubyAhPSBFSU5UUiAmJiBlcnJubyAhPSBFTk9NRU0pIHBlcnJvcl9leGl0KDApOworICAgIGlmICgobGVuID0geHJlYWQoMCwgYnVmLCA2NTUzNikpKSB7CisgICAgICB4d3JpdGUoMSwgYnVmLCBsZW4pOworICAgICAgc2l6ZSArPSBsZW47CisgICAgICBpZiAoKG5vdyA9IG1pbGxpdGltZSgpKS10aGVuPDI1MCkgY29udGludWU7CisgICAgfQorICAgIGRwcmludGYoMiwgIiVsbHUgYnl0ZXNcciIsIHNpemUpOwogICAgIGlmICghbGVuKSBicmVhazsKLSAgICBzaXplICs9IGxlbjsKLSAgICB4d3JpdGUoMSwgdG95YnVmLCBsZW4pOwotICAgIHh3cml0ZSgyLCBidWYsIHNwcmludGYoYnVmLCAiJSJQUkl1NjQiIGJ5dGVzXHIiLCBzaXplKSk7CiAgIH0KLSAgeHdyaXRlKDIsICJcbiIsIDEpOworICBkcHJpbnRmKDIsICJcbiIpOwogfQpkaWZmIC0tZ2l0IGEvdG95cy9vdGhlci9sc2F0dHIuYyBiL3RveXMvb3RoZXIvbHNhdHRyLmMKaW5kZXggM2UzMjc5Mi4uNTQ3MDEyZSAxMDA2NDQKLS0tIGEvdG95cy9vdGhlci9sc2F0dHIuYworKysgYi90b3lzL290aGVyL2xzYXR0ci5jCkBAIC0xMDIsNyArMTAyLDggQEAKICAgeyJOb19EdW1wIiwgICAgICAgICAgICAgICAgICAgICAgIEZTX05PRFVNUF9GTCwgICAgICAgJ2QnfSwKICAgeyJOb19BdGltZSIsICAgICAgICAgICAgICAgICAgICAgIEZTX05PQVRJTUVfRkwsICAgICAgJ0EnfSwKICAgeyJDb21wcmVzc2lvbl9SZXF1ZXN0ZWQiLCAgICAgICAgIEZTX0NPTVBSX0ZMLCAgICAgICAgJ2MnfSwKLSAgeyJFbmNyeXB0ZWQiLCAgICAgICAgICAgICAgICAgICAgIEZTX0VOQ1JZUFRfRkwsICAgICAgJ0UnfSwKKyAgLy8gRlNfRU5DUllQVF9GTCBhZGRlZCB0byBsaW51eCA0LjUgbWFyY2ggMjAxNiwgK3k3ID0gMjAyMworICB7IkVuY3J5cHRlZCIsICAgICAgICAgICAgICAgICAgICAgMHg4MDAsICAgICAgICAgICAgICAnRSd9LAogICB7IkpvdXJuYWxlZF9EYXRhIiwgICAgICAgICAgICAgICAgRlNfSk9VUk5BTF9EQVRBX0ZMLCAnaid9LAogICB7IkluZGV4ZWRfZGlyZWN0b3J5IiwgICAgICAgICAgICAgRlNfSU5ERVhfRkwsICAgICAgICAnSSd9LAogICB7Ik5vX1RhaWxtZXJnaW5nIiwgICAgICAgICAgICAgICAgRlNfTk9UQUlMX0ZMLCAgICAgICAndCd9LApkaWZmIC0tZ2l0IGEvdG95cy9vdGhlci9wd2dlbi5jIGIvdG95cy9vdGhlci9wd2dlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NjIxY2MKLS0tIC9kZXYvbnVsbAorKysgYi90b3lzL290aGVyL3B3Z2VuLmMKQEAgLTAsMCArMSw3NiBAQAorLyogcHdnZW4uYyAtIEEgcGFzc3dvcmQgZ2VuZXJhdG9yLgorICoKKyAqIENvcHlyaWdodCAyMDIwIE1vcml0eiBS9mhyaWNoIDxtb3JpdHpAaWxkZWZvbnMuZGU+CisKK1VTRV9QV0dFTihORVdUT1kocHdnZW4sICI+MnIocmVtb3ZlKTpjKGNhcGl0YWxpemUpbihudW1lcmFscyl5KHN5bWJvbHMpcyhzZWN1cmUpQihhbWJpZ3VvdXMpaChoZWxwKUMxdkEobm8tY2FwaXRhbGl6ZSkwKG5vLW51bWVyYWxzKVstY0FdWy1uMF1bLUMxXSIsIFRPWUZMQUdfVVNSfFRPWUZMQUdfQklOKSkKKworY29uZmlnIFBXR0VOCisgIGJvb2wgInB3Z2VuIgorICBkZWZhdWx0IHkKKyAgaGVscAorICAgIHVzYWdlOiBwd2dlbiBbLWNBbjB5cnNCaEMxdl0gW0xFTkdUSF0gW0NPVU5UXQorCisgICAgR2VuZXJhdGUgaHVtYW4tcmVhZGFibGUgcmFuZG9tIHBhc3N3b3Jkcy4gV2hlbiBvdXRwdXQgaXMgdG8gdHR5IHByb2R1Y2VzCisgICAgYSBzY3JlZW5mdWxsIHRvIGRlZmVhdCBzaG91bGRlciBzdXJmaW5nIChwaWNrIG9uZSBhbmQgY2xlYXIgdGhlIHNjcmVlbikuCisKKyAgICAtYyAgLS1jYXBpdGFsaXplICAgICAgICAgICAgICAgICAgUGVybWl0IGNhcGl0YWwgbGV0dGVycy4KKyAgICAtQSAgLS1uby1jYXBpdGFsaXplICAgICAgICAgICAgICAgRG9uJ3QgaW5jbHVkZSBjYXBpdGFsIGxldHRlcnMuCisgICAgLW4gIC0tbnVtZXJhbHMgICAgICAgICAgICAgICAgICAgIFBlcm1pdCBudW1iZXJzLgorICAgIC0wICAtLW5vLW51bWVyYWxzICAgICAgICAgICAgICAgICBEb24ndCBpbmNsdWRlIG51bWJlcnMuCisgICAgLXkgIC0tc3ltYm9scyAgICAgICAgICAgICAgICAgICAgIFBlcm1pdCBzcGVjaWFsIGNoYXJhY3RlcnMgKCQjJS4uLikuCisgICAgLXIgPGNoYXJzPiAgLS1yZW1vdmU9PGNoYXJzPiAgICAgIERvbid0IGluY2x1ZGUgdGhlIGdpdmVuIGNoYXJhY3RlcnMuCisgICAgLXMgIC0tc2VjdXJlICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlIG1vcmUgcmFuZG9tIHBhc3N3b3Jkcy4KKyAgICAtQiAgLS1hbWJpZ3VvdXMgICAgICAgICAgICAgICAgICAgQXZvaWQgYW1iaWd1b3VzIGNoYXJhY3RlcnMgKGUuZy4gMCwgTykuCisgICAgLWggIC0taGVscCAgICAgICAgICAgICAgICAgICAgICAgIFByaW50IHRoaXMgaGVscCBtZXNzYWdlLgorICAgIC1DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmludCB0aGUgb3V0cHV0IGluIGNvbHVtbnMuCisgICAgLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW50IHRoZSBvdXRwdXQgb25lIGxpbmUgZWFjaC4KKyAgICAtdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgaW5jbHVkZSB2b3dlbHMuCisqLworCisjZGVmaW5lIEZPUl9wd2dlbgorI2luY2x1ZGUgInRveXMuaCIKKworR0xPQkFMUygKKyAgY2hhciAqcjsKKykKKwordm9pZCBwd2dlbl9tYWluKHZvaWQpCit7CisgIGludCBsZW5ndGggPSA4LCBjb3VudCwgaWksIGpqLCBjLCByYW5kID0gMCwgeCA9IDA7CisgIHVuc2lnbmVkIHh4ID0gODAsIHl5ID0gMjQ7CisgIGNoYXIgcmFuZGJ1ZlsxNl07CisKKyAgaWYgKGlzYXR0eSgxKSkgdGVybWluYWxfc2l6ZSgmeHgsICZ5eSk7CisgIGVsc2UgdG95cy5vcHRmbGFncyB8PSBGTEFHXzE7CisKKyAgaWYgKHRveXMub3B0YyAmJiAobGVuZ3RoID0gYXRvbHgoKnRveXMub3B0YXJncykpPnNpemVvZih0b3lidWYpKQorICAgIGVycm9yX2V4aXQoImJhZCBsZW5ndGgiKTsKKyAgaWYgKHRveXMub3B0Yz4xKSBjb3VudCA9IGF0b2x4KHRveXMub3B0YXJnc1sxXSk7CisgIGVsc2UgY291bnQgPSBGTEFHKDEpID8gMSA6ICh4eC8obGVuZ3RoKzEpKSooeXktMSk7CisKKyAgZm9yIChqaiA9IDA7IGpqPGNvdW50OyBqaisrKSB7CisgICAgZm9yIChpaSA9IDA7IGlpPGxlbmd0aDspIHsKKyAgICAgIC8vIERvbid0IGZldGNoIG1vcmUgcmFuZG9tIHRoYW4gbmVjZXNzYXJ5LCBnaXZlIGVhY2ggYnl0ZSAyIHRyaWVzIHRvIGZpdAorICAgICAgaWYgKCFyYW5kKSB4Z2V0cmFuZG9tKHJhbmRidWYsIHJhbmQgPSBzaXplb2YocmFuZGJ1ZiksIDApOworICAgICAgYyA9IDMzK3JhbmRidWZbLS1yYW5kXSU5MzsgLy8gcmVtYWluZGVyIDY5IG1ha2VzID4xMDIgbGVzcyBsaWtlbHkKKyAgICAgIGlmIChGTEFHKHMpKSByYW5kYnVmW3JhbmRdID0gMDsKKworICAgICAgaWYgKGM+PSdBJyAmJiBjPD0nWicpIHsKKyAgICAgICAgaWYgKEZMQUcoQSkpIGNvbnRpbnVlOworICAgICAgICAvLyB0YWtlIG91dCBoYWxmIHRoZSBjYXBpdGFsIGxldHRlcnMgdG8gYmUgbW9yZSBodW1hbiByZWFkYWJsZQorICAgICAgICBlbHNlIGMgfD0gKDB4ODAmcmFuZGJ1ZltyYW5kXSk+PjI7CisgICAgICB9CisgICAgICBpZiAoRkxBRygwKSAmJiBjPj0nMCcgJiYgYzw9JzknKSBjb250aW51ZTsKKyAgICAgIGlmIChGTEFHKEIpICYmIHN0cmNocigiME8xbEknYC4sIiwgYykpIGNvbnRpbnVlOworICAgICAgaWYgKEZMQUcodikgJiYgc3RyY2hyKCJhZWlvdSIsIHRvbG93ZXIoYykpKSBjb250aW51ZTsKKyAgICAgIGlmICghRkxBRyh5KSB8fCAoMHg4MCZyYW5kYnVmW3JhbmRdKSkKKyAgICAgICAgaWYgKGM8JzAnIHx8IChjPic5JyAmJiBjPCdBJykgfHwgKGM+J1onICYmIGM8J2EnKSB8fCBjPid6JykgY29udGludWU7CisgICAgICBpZiAoVFQuciAmJiBzdHJjaHIoVFQuciwgYykpIGNvbnRpbnVlOworCisgICAgICB0b3lidWZbaWkrK10gPSBjOworICAgIH0KKyAgICBpZiAoRkxBRygxKSB8fCAoeCArPSBsZW5ndGgrMSkrbGVuZ3RoPj14eCkgeCA9IDA7CisgICAgeHByaW50ZigiJS4qcyVjIiwgbGVuZ3RoLCB0b3lidWYsIHggPyAnICcgOiAnXG4nKTsKKyAgfQorICBpZiAoeCkgeHB1dGMoJ1xuJyk7Cit9CmRpZmYgLS1naXQgYS90b3lzL3BlbmRpbmcvc2guYyBiL3RveXMvcGVuZGluZy9zaC5jCmluZGV4IDIxMTQzMTk5Li4xNGZiNTVjIDEwMDY0NAotLS0gYS90b3lzL3BlbmRpbmcvc2guYworKysgYi90b3lzL3BlbmRpbmcvc2guYwpAQCAtNDUsNiArNDUsNyBAQAogVVNFX1NIKE5FV1RPWShleGVjLCAiXmNsYToiLCBUT1lGTEFHX05PRk9SSykpCiBVU0VfU0goTkVXVE9ZKGV4aXQsIDAsIFRPWUZMQUdfTk9GT1JLKSkKIFVTRV9TSChORVdUT1koZXhwb3J0LCAibnAiLCBUT1lGTEFHX05PRk9SSykpCitVU0VfU0goTkVXVE9ZKHNldCwgMCwgVE9ZRkxBR19OT0ZPUkspKQogVVNFX1NIKE5FV1RPWShzaGlmdCwgIj4xIiwgVE9ZRkxBR19OT0ZPUkspKQogVVNFX1NIKE5FV1RPWShzb3VyY2UsICIwPDEiLCBUT1lGTEFHX05PRk9SSykpCiBVU0VfU0goT0xEVE9ZKC4sIHNvdXJjZSwgVE9ZRkxBR19OT0ZPUkspKQpAQCAtOTMsNiArOTQsMjQgQEAKICAgICBFeGl0IHNoZWxsLiAgSWYgbm8gcmV0dXJuIHZhbHVlIHN1cHBsaWVkIG9uIGNvbW1hbmQgbGluZSwgdXNlIHZhbHVlCiAgICAgb2YgbW9zdCByZWNlbnQgY29tbWFuZCwgb3IgMCBpZiBub25lLgogCitjb25maWcgU0VUCisgIGJvb2wKKyAgZGVmYXVsdCBuCisgIGRlcGVuZHMgb24gU0gKKyAgaGVscAorICAgIHVzYWdlOiBzZXQgWythXSBbK28gT1BUSU9OXSBbVkFSLi4uXQorCisgICAgU2V0IHZhcmlhYmxlcyBhbmQgc2hlbGwgYXR0cmlidXRlcy4gVXNlICsgdG8gZGlzYWJsZSBhbmQgLSB0byBlbmFibGUuCisgICAgTkFNRT1WQUxVRSBhcmd1bWVudHMgYXNzaWduIHRvIHRoZSB2YXJpYWJsZSwgYW55IGxlZnRvdmVycyBzZXQgJDEsICQyLi4uCisgICAgV2l0aCBubyBhcmd1bWVudHMsIHByaW50cyBjdXJyZW50IHZhcmlhYmxlcy4KKworICAgIC1mCU5BTUUgaXMgYSBmdW5jdGlvbgorICAgIC12CU5BTUUgaXMgYSB2YXJpYWJsZQorICAgIC1uCWRlcmVmZXJlbmNlIE5BTUUgYW5kIHVuc2V0IHRoYXQKKworICAgIE9QVElPTnM6CisgICAgICBoaXN0b3J5IC0gZW5hYmxlIGNvbW1hbmQgaGlzdG9yeQorCiBjb25maWcgVU5TRVQKICAgYm9vbAogICBkZWZhdWx0IG4KQEAgLTE4NiwxMSArMjA1LDEwIEBACiAgICAgfSBleGVjOwogICB9OwogCi0gIC8vIGtlZXAgbGluZW5vIGhlcmU6IHVzZWQgdG8gd29yayBhcm91bmQgY29tcGlsZXIgbGltaXRhdGlvbiBpbiBydW5fY29tbWFuZCgpCi0gIGxvbmcgbGluZW5vOworICAvLyBrZWVwIGlmcyBoZXJlOiB1c2VkIHRvIHdvcmsgYXJvdW5kIGNvbXBpbGVyIGxpbWl0YXRpb24gaW4gcnVuX2NvbW1hbmQoKQogICBjaGFyICppZnMsICppc2V4ZWMsICp3Y3BhdDsKLSAgdW5zaWduZWQgb3B0aW9ucywgam9iY250OwotICBpbnQgaGZkLCBwaWQsIGJhbmdwaWQsIHZhcnNsZW4sIHNoaWZ0LCBjZGNvdW50OworICB1bnNpZ25lZCBvcHRpb25zLCBqb2JjbnQsIExJTkVOTzsKKyAgaW50IGhmZCwgcGlkLCBiYW5ncGlkLCB2YXJzbGVuLCBjZGNvdW50OwogICBsb25nIGxvbmcgU0VDT05EUzsKIAogICAvLyBnbG9iYWwgYW5kIGxvY2FsIHZhcmlhYmxlcwpAQCAtMjAyLDggKzIyMCw5IEBACiAgIC8vIFBhcnNlZCBmdW5jdGlvbnMKICAgc3RydWN0IHNoX2Z1bmN0aW9uIHsKICAgICBjaGFyICpuYW1lOwotICAgIHN0cnVjdCBzaF9waXBlbGluZSB7ICAvLyBwaXBlbGluZSBzZWdtZW50cworICAgIHN0cnVjdCBzaF9waXBlbGluZSB7ICAvLyBwaXBlbGluZSBzZWdtZW50czogbGlua2VkIGxpc3Qgb2YgYXJnIHcvbWV0YWRhdGEKICAgICAgIHN0cnVjdCBzaF9waXBlbGluZSAqbmV4dCwgKnByZXYsICplbmQ7CisgICAgICB1bnNpZ25lZCBsaW5lbm87CiAgICAgICBpbnQgY291bnQsIGhlcmUsIHR5cGU7IC8vIFRPRE8gYWJ1c2UgdHlwZSB0byByZXBsYWNlIGNvdW50IGR1cmluZyBwYXJzaW5nCiAgICAgICBzdHJ1Y3Qgc2hfYXJnIHsKICAgICAgICAgY2hhciAqKnY7CkBAIC0yMjMsOCArMjQyLDE3IEBACiAgICAgc3RydWN0IHNoX2FyZyAqcmF3LCBhcmc7CiAgIH0gKnBwOyAvLyBjdXJyZW50bHkgcnVubmluZyBwcm9jZXNzCiAKKyAgc3RydWN0IHNoX2NhbGxzdGFjayB7CisgICAgc3RydWN0IHNoX2NhbGxzdGFjayAqbmV4dDsKKyAgICBzdHJ1Y3Qgc2hfZnVuY3Rpb24gc2NyYXRjaDsKKyAgICBzdHJ1Y3Qgc2hfYXJnIGFyZzsKKyAgICBzdHJ1Y3QgYXJnX2xpc3QgKmRlbGV0ZTsKKyAgICB1bnNpZ25lZCBsaW5lbm87CisgICAgbG9uZyBzaGlmdDsKKyAgfSAqY2M7CisKICAgLy8gam9iIGxpc3QsIGNvbW1hbmQgbGluZSBmb3IgJCosIHNjcmF0Y2ggc3BhY2UgZm9yIGRvX3dpbGRjYXJkX2ZpbGVzKCkKLSAgc3RydWN0IHNoX2FyZyBqb2JzLCAqYXJnLCAqd2NkZWNrOworICBzdHJ1Y3Qgc2hfYXJnIGpvYnMsICp3Y2RlY2s7CiApCiAKIC8vIENhbid0IHlldCBhdm9pZCB0aGlzIHByb3RvdHlwZS4gRnVuZGFtZW50YWwgcHJvYmxlbSBpcyAkKCQoJChibGFoKSkpIG5lc3RzLApAQCAtMjM3LDggKzI2NSwxMCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKnJlZGlyZWN0b3JzW10gPSB7Ijw8PCIsICI8PC0iLCAiPDwiLCAiPCYiLCAiPD4iLCAiPCIsICI+PiIsCiAgICI+JiIsICI+fCIsICI+IiwgIiY+PiIsICImPiIsIDB9OwogCi0jZGVmaW5lIE9QVF9CUkFDRSAgICAgICAweDEwMCAgIC8vIHNldCAtQgotI2RlZmluZSBPUFRfTk9DTE9CQkVSICAgMHgyMDAgICAvLyBzZXQgLUMKKy8vIFRoZSBvcmRlciBvZiB0aGVzZSBoYXMgdG8gbWF0Y2ggdGhlIHN0cmluZyBpbiBzZXRfbWFpbigpCisjZGVmaW5lIE9QVF9CCTB4MTAwCisjZGVmaW5lIE9QVF9DCTB4MjAwCisjZGVmaW5lIE9QVF94CTB4NDAwCiAKIHN0YXRpYyB2b2lkIHN5bnRheF9lcnIoY2hhciAqcykKIHsKQEAgLTI1OCw3ICsyODgsNyBAQAogfQogCiAvLyBhZGQgYXJndW1lbnQgdG8gYW4gYXJnX2xpc3QKLXN0YXRpYyBjaGFyICpwdXNoX2FyZyhzdHJ1Y3QgYXJnX2xpc3QgKipsaXN0LCBjaGFyICphcmcpCitzdGF0aWMgdm9pZCAqcHVzaF9hcmcoc3RydWN0IGFyZ19saXN0ICoqbGlzdCwgdm9pZCAqYXJnKQogewogICBzdHJ1Y3QgYXJnX2xpc3QgKmFsOwogCkBAIC00MDksNyArNDM5LDcgQEAKIAogICAgIGlmIChjID09ICdTJykgc3ByaW50Zih0b3lidWYsICIlbGxkIiwgKG1pbGxpdGltZSgpLVRULlNFQ09ORFMpLzEwMDApOwogICAgIGVsc2UgaWYgKGMgPT0gJ1InKSBzcHJpbnRmKHRveWJ1ZiwgIiVsZCIsIHJhbmRvbSgpJigoMTw8MTYpLTEpKTsKLSAgICBlbHNlIGlmIChjID09ICdMJykgc3ByaW50Zih0b3lidWYsICIlbGQiLCBUVC5saW5lbm8pOworICAgIGVsc2UgaWYgKGMgPT0gJ0wnKSBzcHJpbnRmKHRveWJ1ZiwgIiV1IiwgVFQuTElORU5PKTsKICAgICBlbHNlIGlmIChjID09ICdHJykgc3ByaW50Zih0b3lidWYsICJUT0RPOiBHUk9VUFMiKTsKIAogICAgIHJldHVybiB0b3lidWY7CkBAIC00ODUsMTEgKzUxNSwxOCBAQAogCiAgIC8vIFRoaW5ncyB3ZSBzaG91bGQgb25seSByZXR1cm4gYXQgdGhlIF9zdGFydF8gb2YgYSB3b3JkCiAKLSAgaWYgKHN0cnN0YXJ0KCZlbmQsICI8KCIpIHx8IHN0cnN0YXJ0KCZlbmQsICI+KCIpKSB0b3lidWZbcXVvdGUrK109JyknOwotCiAgIC8vIFJlZGlyZWN0aW9ucy4gMTIzPDxmaWxlLSBwYXJzZXMgYXMgMiBhcmdzOiAiMTIzPDwiICJmaWxlLSIuCiAgIHMgPSBlbmQgKyByZWRpcl9wcmVmaXgoZW5kKTsKLSAgaWYgKChpID0gYW55c3RhcnQocywgKHZvaWQgKilyZWRpcmVjdG9ycykpKSByZXR1cm4gcytpOworCisgIGlmIChzdHJzdGFydCgmcywgIjwoIikgfHwgc3Ryc3RhcnQoJnMsICI+KCIpKSB7CisgICAgdG95YnVmW3F1b3RlKytdPScpJzsKKyAgICBlbmQgPSBzOworICB9IGVsc2UgaWYgKChpID0gYW55c3RhcnQocywgKHZvaWQgKilyZWRpcmVjdG9ycykpKSByZXR1cm4gcytpOworCisgIGlmIChzdHJzdGFydCgmcywgIjwoIikgfHwgc3Ryc3RhcnQoJnMsICI+KCIpKSB7CisgICAgdG95YnVmW3F1b3RlKytdPScpJzsKKyAgICBlbmQgPSBzOworICB9CiAKICAgLy8gKCggaXMgYSBzcGVjaWFsIHF1b3RlIGF0IHRoZSBzdGFydCBvZiBhIHdvcmQKICAgaWYgKHN0cnN0YXJ0KCZlbmQsICIoKCIpKSB0b3lidWZbcXVvdGUrK10gPSAyNTQ7CkBAIC01MDYsMTQgKzU0MywxMyBAQAogCiAgICAgLy8gSGFuZGxlIHF1b3RlIGNvbnRleHRzCiAgICAgaWYgKChxID0gcXVvdGUgPyB0b3lidWZbcXVvdGUtMV0gOiAwKSkgewotCiAgICAgICAvLyB3aGVuIHdhaXRpbmcgZm9yIHBhcmVudGhlc2VzLCB0aGV5IG5lc3QKICAgICAgIGlmICgocSA9PSAnKScgfHwgcSA+PSAyNTQpICYmICgqZW5kID09ICcoJyB8fCAqZW5kID09ICcpJykpIHsKICAgICAgICAgaWYgKCplbmQgPT0gJygnKSBxYysrOwogICAgICAgICBlbHNlIGlmIChxYykgcWMtLTsKICAgICAgICAgZWxzZSBpZiAocSA+PSAyNTQpIHsKICAgICAgICAgICAvLyAoKCBjYW4gZW5kIHdpdGggKSkgb3IgcmV0cm9hY3RpdmVseSBiZWNvbWUgdHdvICgoIGlmIHdlIGhpdCBvbmUgKQotICAgICAgICAgIGlmIChzdHJzdGFydCgmZW5kLCAiKSkiKSkgcXVvdGUtLTsKKyAgICAgICAgICBpZiAoKmVuZCA9PSAnKScgJiYgZW5kWzFdID09ICcpJykgcXVvdGUtLSwgZW5kKys7CiAgICAgICAgICAgZWxzZSBpZiAocSA9PSAyNTQpIHJldHVybiBzdGFydCsxOwogICAgICAgICAgIGVsc2UgaWYgKHEgPT0gMjU1KSB0b3lidWZbcXVvdGUtMV0gPSAnKSc7CiAgICAgICAgIH0gZWxzZSBpZiAoKmVuZCA9PSAnKScpIHF1b3RlLS07CkBAIC01MzMsNyArNTY5LDYgQEAKICAgICAgIC8vIFRoaW5ncyB0aGF0IG9ubHkgbWF0dGVyIHdoZW4gdW5xdW90ZWQKIAogICAgICAgaWYgKGlzc3BhY2UoKmVuZCkpIGJyZWFrOwotICAgICAgaWYgKCplbmQgPT0gJyknKSByZXR1cm4gZW5kKyhzdGFydD09ZW5kKTsKIAogICAgICAgLy8gRmxvdyBjb250cm9sIGNoYXJhY3RlcnMgdGhhdCBlbmQgcGlwZWxpbmUgc2VnbWVudHMKICAgICAgIHMgPSBlbmQgKyBhbnlzdGFydChlbmQsIChjaGFyICpbXSl7Ijs7JiIsICI7OyIsICI7JiIsICI7IiwgInx8IiwKQEAgLTU0NCw3ICs1NzksNyBAQAogICAgIC8vIFRoaW5ncyB0aGUgc2FtZSB1bnF1b3RlZCBvciBpbiBtb3N0IG5vbi1zaW5nbGUtcXVvdGUgY29udGV4dHMKIAogICAgIC8vIHN0YXJ0IG5ldyBxdW90ZSBjb250ZXh0PwotICAgIGlmIChzdHJjaHIoIlwiJ2AiLCAqZW5kKSkgdG95YnVmW3F1b3RlKytdID0gKmVuZDsKKyAgICBpZiAoc3RyY2hyKCInXCJgIisocSA9PSAnIicpLCAqZW5kKSkgdG95YnVmW3F1b3RlKytdID0gKmVuZDsKIAogICAgIC8vIGJhY2tzbGFzaCBlc2NhcGVzCiAgICAgZWxzZSBpZiAoKmVuZCA9PSAnXFwnKSB7CkBAIC03NTcsMjEgKzc5MiwyMSBAQAogICBpZiAoY2MgPT0gJy0nKSB7CiAgICAgcyA9IHNzID0geG1hbGxvYyg4KTsKICAgICBpZiAoVFQub3B0aW9ucyZGTEFHX2kpICpzcysrID0gJ2knOwotICAgIGlmIChUVC5vcHRpb25zJk9QVF9CUkFDRSkgKnNzKysgPSAnQic7CisgICAgaWYgKFRULm9wdGlvbnMmT1BUX0IpICpzcysrID0gJ0InOwogICAgIGlmIChUVC5vcHRpb25zJkZMQUdfcykgKnNzKysgPSAncyc7CiAgICAgaWYgKFRULm9wdGlvbnMmRkxBR19jKSAqc3MrKyA9ICdjJzsKICAgICAqc3MgPSAwOwogICB9IGVsc2UgaWYgKGNjID09ICc/JykgcyA9IHhtcHJpbnRmKCIlZCIsIHRveXMuZXhpdHZhbCk7CiAgIGVsc2UgaWYgKGNjID09ICckJykgcyA9IHhtcHJpbnRmKCIlZCIsIFRULnBpZCk7Ci0gIGVsc2UgaWYgKGNjID09ICcjJykgcyA9IHhtcHJpbnRmKCIlZCIsIFRULmFyZy0+Yz9UVC5hcmctPmMtMTowKTsKKyAgZWxzZSBpZiAoY2MgPT0gJyMnKSBzID0geG1wcmludGYoIiVkIiwgVFQuY2MtPmFyZy5jP1RULmNjLT5hcmcuYy0xOjApOwogICBlbHNlIGlmIChjYyA9PSAnIScpIHMgPSB4bXByaW50ZigiJWQiKzIqIVRULmJhbmdwaWQsIFRULmJhbmdwaWQpOwogICBlbHNlIHsKICAgICBkZWxldGUgPSAwOwogICAgIGZvciAoKnVzZWQgPSB1dSA9IDA7ICp1c2VkPGxlbiAmJiBpc2RpZ2l0KHN0clsqdXNlZF0pOyArKyp1c2VkKQogICAgICAgdXUgPSAoMTAqdXUpK3N0clsqdXNlZF0tJzAnOwogICAgIGlmICgqdXNlZCkgewotICAgICAgaWYgKHV1KSB1dSArPSBUVC5zaGlmdDsKLSAgICAgIGlmICh1dTxUVC5hcmctPmMpIHMgPSBUVC5hcmctPnZbdXVdOworICAgICAgaWYgKHV1KSB1dSArPSBUVC5jYy0+c2hpZnQ7CisgICAgICBpZiAodXU8VFQuY2MtPmFyZy5jKSBzID0gVFQuY2MtPmFyZy52W3V1XTsKICAgICB9IGVsc2UgaWYgKCgqdXNlZCA9IHZhcmVuZChzdHIpLXN0cikpIHJldHVybiBnZXR2YXIoc3RyKTsKICAgfQogICBpZiAocykgcHVzaF9hcmcoZGVsZXRlLCBzKTsKQEAgLTEyNzAsNyArMTMwNSw3IEBACiAgICAgICAgICAgICBmb3IgKHNsaWNlKyssIGtrID0gMDsga2s8VFQudmFyc2xlbjsga2srKykKICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKHMgPSBUVC52YXJzW2trXS5zdHIsIHNzLCBqaikpCiAgICAgICAgICAgICAgICAgYXJnX2FkZCgmYWEsIHB1c2hfYXJnKGRlbGV0ZSwgcyA9IHhzdHJuZHVwKHMsIHN0cmlkeChzLCAnPScpKSkpOwotICAgICAgICAgICAgaWYgKGFhLmMpIHB1c2hfYXJnKGRlbGV0ZSwgKHZvaWQgKilhYS52KTsKKyAgICAgICAgICAgIGlmIChhYS5jKSBwdXNoX2FyZyhkZWxldGUsIGFhLnYpOwogCiAgICAgICAgICAgLy8gZWxzZSBkZXJlZmVyZW5jZSB0byBnZXQgbmV3IHZhcm5hbWUsIGRpc2NhcmRpbmcgaWYgbm9uZSwgY2hlY2sgZXJyCiAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEyODgsOCArMTMyMyw4IEBACiAgICAgICAgICAgICBpZiAoIWpqKSBpZnMgPSAodm9pZCAqKTE7CiAgICAgICAgICAgICBlbHNlIGlmIChpZnMgJiYgKihzcyA9IGlmcykpIHsKICAgICAgICAgICAgICAgaWYgKHN0cmNocigiQCoiLCBjYykpIHsKLSAgICAgICAgICAgICAgICBhYS5jID0gVFQuYXJnLT5jLTE7Ci0gICAgICAgICAgICAgICAgYWEudiA9IFRULmFyZy0+disxOworICAgICAgICAgICAgICAgIGFhLmMgPSBUVC5jYy0+YXJnLmMtMTsKKyAgICAgICAgICAgICAgICBhYS52ID0gVFQuY2MtPmFyZy52KzE7CiAgICAgICAgICAgICAgICAgamogPSAxOwogICAgICAgICAgICAgICB9IGVsc2UgaWZzID0gZ2V0dmFyX3NwZWNpYWwoaWZzLCBzdHJsZW4oaWZzKSwgJmpqLCBkZWxldGUpOwogICAgICAgICAgICAgICBpZiAoc3MgJiYgc3NbampdKSB7CkBAIC0xMzEyLDggKzEzNDcsOCBAQAogICAgICAgLy8gUmVzb2x2ZSB1bnByZWZpeGVkIHZhcmlhYmxlcwogICAgICAgaWYgKHN0cmNocigieyQiLCBzc1stMV0pKSB7CiAgICAgICAgIGlmIChzdHJjaHIoIkAqIiwgY2MpKSB7Ci0gICAgICAgICAgYWEuYyA9IFRULmFyZy0+Yy0xOwotICAgICAgICAgIGFhLnYgPSBUVC5hcmctPnYrMTsKKyAgICAgICAgICBhYS5jID0gVFQuY2MtPmFyZy5jLTE7CisgICAgICAgICAgYWEudiA9IFRULmNjLT5hcmcudisxOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGlmcyA9IGdldHZhcl9zcGVjaWFsKHNzLCBqaiwgJmpqLCBkZWxldGUpOwogICAgICAgICAgIGlmICghamopIHsKQEAgLTE2MDAsNyArMTYzNSw3IEBACiAgIGNoYXIgKnMsICpzczsKIAogICAvLyBjb2xsZWN0IGJyYWNlIHNwYW5zCi0gIGlmICgoVFQub3B0aW9ucyZPUFRfQlJBQ0UpICYmICEoZmxhZ3MmTk9fQlJBQ0UpKSBmb3IgKGkgPSAwOyA7IGkrKykgeworICBpZiAoKFRULm9wdGlvbnMmT1BUX0IpICYmICEoZmxhZ3MmTk9fQlJBQ0UpKSBmb3IgKGkgPSAwOyA7IGkrKykgewogICAgIC8vIHNraXAgcXVvdGVkL2VzY2FwZWQgdGV4dAogICAgIHdoaWxlICgocyA9IHBhcnNlX3dvcmQob2xkK2ksIDEsIDApKSAhPSBvbGQraSkgaSArPSBzLShvbGQraSk7CiAgICAgLy8gc3RvcCBhdCBlbmQgb2Ygc3RyaW5nIGlmIHdlIGhhdmVuJ3QgZ290IGFueSBtb3JlIG9wZW4gYnJhY2VzCkBAIC0xNzc4LDMxICsxODEzLDMyIEBACiAvLyBUT0RPIHwmCiAKIC8vIHR1cm4gYSBwYXJzZWQgcGlwZWxpbmUgYmFjayBpbnRvIGEgc3RyaW5nLgotc3RhdGljIGNoYXIgKnBsMnN0cihzdHJ1Y3Qgc2hfcGlwZWxpbmUgKnBsKQorc3RhdGljIGNoYXIgKnBsMnN0cihzdHJ1Y3Qgc2hfcGlwZWxpbmUgKnBsLCBpbnQgb25lKQogewotICBzdHJ1Y3Qgc2hfcGlwZWxpbmUgKmVuZCA9IDA7Ci0gIGludCBsZXZlbCA9IDAsIGxlbiA9IDAsIGksIGo7Ci0gIGNoYXIgKnMsICpzcywgKnNzczsKKyAgc3RydWN0IHNoX3BpcGVsaW5lICplbmQgPSAwLCAqcHA7CisgIGludCBsZW4sIGk7CisgIGNoYXIgKnMsICpzczsKKworICAvLyBGaW5kIGVuZCBvZiBibG9jayAob3Igb25lIGFyZ3VtZW50KQorICBpZiAob25lKSBlbmQgPSBwbC0+bmV4dDsKKyAgZWxzZSBmb3IgKGVuZCA9IHBsLCBsZW4gPSAwOyBlbmQ7IGVuZCA9IGVuZC0+bmV4dCkKKyAgICBpZiAoZW5kLT50eXBlID09IDEpIGxlbisrOworICAgIGVsc2UgaWYgKGVuZC0+dHlwZSA9PSAzICYmIC0tbGVuPDApIGJyZWFrOwogCiAgIC8vIG1lYXN1cmUsIHRoZW4gYWxsb2NhdGUKLSAgZm9yIChqID0gMDsgOyBqKyspIGZvciAoZW5kID0gcGw7IGVuZDsgZW5kID0gZW5kLT5uZXh0KSB7Ci0gICAgaWYgKGVuZC0+dHlwZSA9PSAxKSBsZXZlbCsrOwotICAgIGVsc2UgaWYgKGVuZC0+dHlwZSA9PSAzICYmIC0tbGV2ZWw8MCkgYnJlYWs7CisgIGZvciAoc3MgPSAwOzsgc3MgPSB4bWFsbG9jKGxlbisxKSkgeworICAgIGZvciAocHAgPSBwbDsgcHAgIT0gZW5kOyBwcCA9IHBwLT5uZXh0KSB7CisgICAgICBmb3IgKGkgPSBsZW4gPSAwOyBpPHBwLT5hcmctPmM7IGkrKykKKyAgICAgICAgbGVuICs9IHNucHJpbnRmKHNzK2xlbiwgc3MgPyBJTlRfTUFYIDogMCwgIiVzICIsIHBwLT5hcmctPnZbaV0pOworICAgICAgaWYgKCEocyA9IHBwLT5hcmctPnZbcHAtPmFyZy0+Y10pKSBzID0gIjsiKyhwcC0+bmV4dD09ZW5kKTsKKyAgICAgIGxlbiArPSBzbnByaW50ZihzcytsZW4sIHNzID8gSU5UX01BWCA6IDAsIHMpOworICAgIH0KIAotICAgIGZvciAoaSA9IDA7IGk8cGwtPmFyZy0+YzsgaSsrKQotICAgICAgaWYgKGopIHNzICs9IHNwcmludGYoc3MsICIlcyAiLCBwbC0+YXJnLT52W2ldKTsKLSAgICAgIGVsc2UgbGVuICs9IHN0cmxlbihwbC0+YXJnLT52W2ldKSsxOwotCi0gICAgc3NzID0gcGwtPmFyZy0+dltwbC0+YXJnLT5jXTsKLSAgICBpZiAoIXNzcykgc3NzID0gIjsiOwotICAgIGlmIChqKSBzcyA9IHN0cGNweShzcywgc3NzKTsKLSAgICBlbHNlIGxlbiArPSBzdHJsZW4oc3NzKTsKKyAgICBpZiAoc3MpIHJldHVybiBzczsKKyAgfQogCiAvLyBUT0RPIHRlc3Qgb3V0cHV0IHdpdGggY2FzZSBhbmQgZnVuY3Rpb24KIC8vIFRPRE8gYWRkIEhFUkUgZG9jdW1lbnRzIGJhY2sgaW4KLSAgICBpZiAoaikgcmV0dXJuIHM7Ci0gICAgcyA9IHNzID0geG1hbGxvYyhsZW4rMSk7Ci0gIH0KIH0KIAogLy8gRXhwYW5kIGFyZ3VtZW50cyBhbmQgcGVyZm9ybSByZWRpcmVjdGlvbnMuIFJldHVybiBuZXcgcHJvY2VzcyBvYmplY3Qgd2l0aApAQCAtMTk3Nyw3ICsyMDEzLDcgQEAKICAgICAgIGVsc2UgaWYgKHN0cnN0cihzcywgIj4+IikpIGZyb20gPSBPX0NSRUFUfE9fQVBQRU5EfE9fV1JPTkxZOwogICAgICAgZWxzZSB7CiAgICAgICAgIGZyb20gPSAoKnNzID09ICc8JykgPyBPX1JET05MWSA6IE9fQ1JFQVR8T19XUk9OTFl8T19UUlVOQzsKLSAgICAgICAgaWYgKCFzdHJjbXAoc3MsICI+IikgJiYgKFRULm9wdGlvbnMmT1BUX05PQ0xPQkJFUikpIHsKKyAgICAgICAgaWYgKCFzdHJjbXAoc3MsICI+IikgJiYgKFRULm9wdGlvbnMmT1BUX0MpKSB7CiAgICAgICAgICAgc3RydWN0IHN0YXQgc3Q7CiAKICAgICAgICAgICAvLyBOb3QgX2p1c3RfIE9fRVhDTDogPiAvZGV2L251bGwgYWxsb3dlZApAQCAtMjExNyw3ICsyMTUzLDcgQEAKICAgICAvLyAiZGVjbGFyYXRpb24gZG9lcyBub3QgZGVjbGFyZSBhbnl0aGluZyIsIGJ1dCBpZiB3ZSBET04nVCBnaXZlIGl0IGEgbmFtZQogICAgIC8vIGl0IGFjY2VwdHMgaXQuIFNvIHdlIGNhbid0IHVzZSB0aGUgdW5pb24ncyB0eXBlIG5hbWUgaGVyZSwgYW5kIGhhdmUKICAgICAvLyB0byBvZmZzZXRvZigpIHRoZSBmaXJzdCB0aGluZyBfYWZ0ZXJfIHRoZSB1bmlvbiB0byBnZXQgdGhlIHNpemUuCi0gICAgbWVtc2V0KCZUVCwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNoX2RhdGEsIGxpbmVubykpOworICAgIG1lbXNldCgmVFQsIDAsIG9mZnNldG9mKHN0cnVjdCBzaF9kYXRhLCBpZnMpKTsKIAogICAgIFRULnBwID0gcHA7CiAgICAgaWYgKCFzaWdzZXRqbXAocmVib3VuZCwgMSkpIHsKQEAgLTIxODcsMTEgKzIyMjMsMTMgQEAKICAgcmV0dXJuIHBsLT5lbmQ7CiB9CiAKKy8vIEFwcGVuZCBhIG5ldyBwaXBlbGluZSB0byBmdW5jdGlvbiwgcmV0dXJuaW5nIHBpcGVsaW5lIGFuZCBwaXBlbGluZSdzIGFyZwogc3RhdGljIHN0cnVjdCBzaF9waXBlbGluZSAqYWRkX3BsKHN0cnVjdCBzaF9mdW5jdGlvbiAqc3AsIHN0cnVjdCBzaF9hcmcgKiphcmcpCiB7CiAgIHN0cnVjdCBzaF9waXBlbGluZSAqcGwgPSB4emFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hfcGlwZWxpbmUpKTsKIAogICAqYXJnID0gcGwtPmFyZzsKKyAgaWYgKFRULmNjKSBwbC0+bGluZW5vID0gVFQuY2MtPmxpbmVubzsKICAgZGxpc3RfYWRkX25vbWFsbG9jKCh2b2lkICopJnNwLT5waXBlbGluZSwgKHZvaWQgKilwbCk7CiAKICAgcmV0dXJuIHBsLT5lbmQgPSBwbDsKQEAgLTIyODMsOCArMjMyMSw2IEBACiAgICAgLy8gUGFyc2UgbmV4dCB3b3JkIGFuZCBkZXRlY3Qgb3ZlcmZsb3cgKHRvbyBtYW55IG5lc3RlZCBxdW90ZXMpLgogICAgIGlmICgoZW5kID0gcGFyc2Vfd29yZChzdGFydCwgMCwgMCkpID09ICh2b2lkICopMSkgZ290byBmbHVzaDsKIAotLy8gZHByaW50ZigyLCAid29yZFslbGRdPSUuKnMgKCVzKVxuIiwgZW5kID8gZW5kLXN0YXJ0IDogMCwgKGludCkoZW5kID8gZW5kLXN0YXJ0IDogMCksIHN0YXJ0LCBleCk7Ci0KICAgICAvLyBJcyB0aGlzIGEgbmV3IHBpcGVsaW5lIHNlZ21lbnQ/CiAgICAgaWYgKCFwbCkgcGwgPSBhZGRfcGwoc3AsICZhcmcpOwogCkBAIC0yMzAxLDggKzIzMzcsMTAgQEAKICAgICAvLyBPaywgd2UgaGF2ZSBhIHdvcmQuIFdoYXQgZG9lcyBpdCBfbWVhbl8/CiAKICAgICAvLyBjYXNlL2VzYWMgcGFyc2luZyBpcyB3ZWlyZCAodW5iYWxhbmNlZCBwYXJlbnRoZXNlcyEpLCBoYW5kbGUgZmlyc3QKLSAgICBpID0gZXggJiYgIXN0cmNtcChleCwgImVzYWMiKSAmJiAocGwtPnR5cGUgfHwgKCpzdGFydD09JzsnICYmIGVuZC1zdGFydD4xKSk7CisgICAgaSA9IGV4ICYmICFzdHJjbXAoZXgsICJlc2FjIikgJiYKKyAgICAgICAgKChwbC0+dHlwZSAmJiBwbC0+dHlwZSAhPSAzKSB8fCAoKnN0YXJ0PT0nOycgJiYgZW5kLXN0YXJ0PjEpKTsKICAgICBpZiAoaSkgeworCiAgICAgICAvLyBQcmVtYXR1cmUgRU9MIGluIHR5cGUgMSAoY2FzZSB4XG5pbikgb3IgMiAoYXQgc3RhcnQgb3IgYWZ0ZXIgOzspIGlzIG9rCiAgICAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgICAgIGlmIChwbC0+dHlwZT09MTI4ICYmIGFyZy0+Yz09MikgYnJlYWs7ICAvLyBjYXNlIHhcbmluCkBAIC0yNjQyLDYgKzI2ODAsNyBAQAogICByZXR1cm4gMDsKIH0KIAorLy8gU3RhY2sgb2YgbmVzdGVkIGlmL2Vsc2UvZmkgYW5kIGZvci9kby9kb25lIGNvbnRleHRzLgogc3RydWN0IGJsb2Nrc3RhY2sgewogICBzdHJ1Y3QgYmxvY2tzdGFjayAqbmV4dDsKICAgc3RydWN0IHNoX3BpcGVsaW5lICpzdGFydCwgKm1pZGRsZTsKQEAgLTI2ODMsNyArMjcyMiw3IEBACiAgICAgaWYgKGM9PSchJykgewogICAgICAgaWYgKCpwcm9tcHQ9PSchJykgcHJvbXB0Kys7CiAgICAgICBlbHNlIHsKLSAgICAgICAgcHAgKz0gc25wcmludGYocHAsIGxlbiwgIiVsZCIsIFRULmxpbmVubyk7CisgICAgICAgIHBwICs9IHNucHJpbnRmKHBwLCBsZW4sICIldSIsIFRULmNjLT5saW5lbm8pOwogICAgICAgICBjb250aW51ZTsKICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGM9PSdcXCcpIHsKQEAgLTI3MzcsNyArMjc3Niw5IEBACiAgIHN0cnVjdCBibG9ja3N0YWNrICpibGsgPSAwLCAqbmV3OwogICBzdHJ1Y3Qgc2hfcHJvY2VzcyAqcHBsaXN0ID0gMDsgLy8gcHJvY2Vzc2VzIHBpcGluZyBpbnRvIGN1cnJlbnQgbGV2ZWwKICAgaW50ICp1cmQgPSAwLCBwaXBlc1syXSA9IHstMSwgLTF9OwotICBsb25nIGk7CisgIGxvbmcgaSwgaiwgazsKKworICBpZiAoIXBsKSByZXR1cm47CiAKIC8vIFRPRE86ICJlY2hvIHwgcmVhZCBpIiBpcyBiYWNrZ3JvdW5kYWJsZSB3aXRoIGN0cmwtWiBkZXNwaXRlIHJlYWQgPSBidWlsdGluLgogLy8gICAgICAgcHJvYmFibHkgaGF2ZSB0byBpbmxpbmUgcnVuX2NvbW1hbmQgaGVyZSB0byBkbyB0aGF0PyBJbXBsaWNpdCAoKQpAQCAtMjc2MiwxMSArMjgwMywzMyBAQAogICAgICAgKnMgPSAqcGwtPmFyZy0+diwgKnNzID0gcGwtPmFyZy0+dlsxXTsKIAogICAgIC8vIFNraXAgZGlzYWJsZWQgYmxvY2tzLCBoYW5kbGUgcGlwZXMKKyAgICBUVC5MSU5FTk8gPSBwbC0+bGluZW5vOwogICAgIGlmIChwbC0+dHlwZTwyKSB7CiAgICAgICBpZiAoYmxrICYmICFibGstPnJ1bikgewogICAgICAgICBwbCA9IHBsLT5lbmQtPm5leHQ7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQorCisgICAgICBpZiAoVFQub3B0aW9ucyZPUFRfeCkgeworICAgICAgICBzdHJ1Y3Qgc2hfY2FsbHN0YWNrICpzYzsKKyAgICAgICAgY2hhciAqc3MsICpwczQgPSBnZXR2YXIoIlBTNCIpOworCisgICAgICAgIC8vIGR1cGxpY2F0ZSBmaXJzdCBjaGFyIG9mIHBzNCBjYWxsIGRlcHRoIHRpbWVzCisgICAgICAgIGlmIChwczQgJiYgKnBzNCkgeworICAgICAgICAgIGZvciAoaSA9IDAsIHNjID0gVFQuY2M7IHNjOyBzYyA9IHNjLT5uZXh0KSBpKys7CisgICAgICAgICAgaiA9IGdldHV0ZjgocHM0LCBrID0gc3RybGVuKHBzNCksIDApOworICAgICAgICAgIHNzID0geG1hbGxvYyhpKmorayk7CisgICAgICAgICAgZm9yIChrID0gMDsgazxpOyBrKyspIG1lbWNweShzcytrKmosIHBzNCwgaik7CisgICAgICAgICAgc3RyY3B5KHNzK2sqaiwgcHM0K2opOworICAgICAgICAgIGRvX3Byb21wdChzcyk7CisgICAgICAgICAgZnJlZShzcyk7CisKKyAgICAgICAgICBzcyA9IHBsMnN0cihwbCwgMSk7CisgICAgICAgICAgZHByaW50ZigyLCAiJXNcbiIsIHNzKTsKKyAgICAgICAgICBmcmVlKHNzKTsKKyAgICAgICAgfQorICAgICAgfQorCiAgICAgICBpZiAocGlwZV9zZWdtZW50cyhjdGwsIHBpcGVzLCAmdXJkKSkgYnJlYWs7CiAgICAgfQogCkBAIC0yNzgwLDEzICsyODQzLDE0IEBACiAgICAgICAgIC8vIEhvdyBtYW55IGxheWVycyB0byBwZWVsIG9mZj8KICAgICAgICAgaSA9IHNzID8gYXRvbChzcykgOiAwOwogICAgICAgICBpZiAoaTwxKSBpID0gMTsKLSAgICAgICAgaWYgKCFibGsgfHwgcGwtPmFyZy0+Yz4yIHx8IHNzW3N0cnNwbihzcywgIjAxMjM0NTY3ODkiKV0pIHsKKyAgICAgICAgaWYgKCFibGsgfHwgcGwtPmFyZy0+Yz4yIHx8IChzcyAmJiBzc1tzdHJzcG4oc3MsICIwMTIzNDU2Nzg5IildKSkgewogICAgICAgICAgIHN5bnRheF9lcnIocyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICB3aGlsZSAoaSAmJiBibGspCi0gICAgICAgICAgaWYgKCEtLWkgJiYgKnMgPT0gJ2MnKSBwbCA9IGJsay0+c3RhcnQ7CisgICAgICAgICAgaWYgKGJsay0+bWlkZGxlICYmICFzdHJjbXAoKmJsay0+bWlkZGxlLT5hcmctPnYsICJkbyIpCisgICAgICAgICAgICAmJiAhLS1pICYmICpzPT0nYycpIHBsID0gYmxrLT5zdGFydDsKICAgICAgICAgICBlbHNlIHBsID0gcG9wX2Jsb2NrKCZibGssIHBpcGVzKTsKICAgICAgICAgaWYgKGkpIHsKICAgICAgICAgICBzeW50YXhfZXJyKCJicmVhayIpOwpAQCAtMjgzOCw3ICsyOTAyLDcgQEAKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIENyZWF0ZSBuZXcgcHJvY2VzcwogICAgICAgICBpZiAoIUNGR19UT1lCT1hfRk9SSykgewotICAgICAgICAgIHNzID0gcGwyc3RyKHBsLT5uZXh0KTsKKyAgICAgICAgICBzcyA9IHBsMnN0cihwbC0+bmV4dCwgMCk7CiAgICAgICAgICAgcHAtPnBpZCA9IHJ1bl9zdWJzaGVsbChzcywgc3RybGVuKHNzKSk7CiAgICAgICAgICAgZnJlZShzcyk7CiAgICAgICAgIH0gZWxzZSBpZiAoIShwcC0+cGlkID0gZm9yaygpKSkgewpAQCAtMjkwNCw3ICsyOTY4LDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgfSBlbHNlIHZ2ICs9ICoqdnYgPT0gJygnOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJnLmMgPSAwOworICAgICAgICAgICAgYXJnLmMgPSBhcmcyLmMgPSAwOwogICAgICAgICAgICAgaWYgKChlcnIgPSBleHBhbmRfYXJnX25vYnJhY2UoJmFyZywgKnZ2KyssIE5PX1NQTElULCAmYmxrLT5mZGVsZXRlLAogICAgICAgICAgICAgICAmYXJnMikpKSBicmVhazsKICAgICAgICAgICAgIHMgPSBhcmcuYyA/ICphcmcudiA6ICIiOwpAQCAtMzAwMSw2ICszMDY1LDcgQEAKICAgc3RydWN0IHNoX2Z1bmN0aW9uIHNjcmF0Y2g7CiAKIC8vIFRPRE8gc3dpdGNoIHRoZSBmbWVtb3BlbiBmb3IgLWMgdG8gdXNlIHRoaXM/IEVycm9yIGNoZWNraW5nPyAkKGJsYWgpCisvLyBUT0RPIE1lcmdlIHRoaXMgd2l0aCBkb19zb3VyY2UoKQogCiAgIG1lbXNldCgmc2NyYXRjaCwgMCwgc2l6ZW9mKHN0cnVjdCBzaF9mdW5jdGlvbikpOwogICBpZiAoIXBhcnNlX2xpbmUobmV3LCAmc2NyYXRjaCkpIHJ1bl9mdW5jdGlvbihzY3JhdGNoLnBpcGVsaW5lKTsKQEAgLTMwMTAsNyArMzA3NSw3IEBACiAgIHJldHVybiB0b3lzLmV4aXR2YWw7CiB9CiAKLS8vIG9ubHkgc2V0IGxvY2FsIHZhcmlhYmxlIHdoZW4gZ2xvYmFsIG5vdCBwcmVzZW50LCBkb2VzIG5vdCBleHRlbmQgYXJyYXkKKy8vIHNldCB2YXJpYWJsZQogc3RhdGljIHN0cnVjdCBzaF92YXJzICppbml0bG9jYWwoY2hhciAqbmFtZSwgY2hhciAqdmFsKQogewogICByZXR1cm4gYWRkdmFyKHhtcHJpbnRmKCIlcz0lcyIsIG5hbWUsIHZhbCA/IHZhbCA6ICIiKSk7CkBAIC0zMDkzLDIyICszMTU4LDE4IEBACiAvLyBSZWFkIHNjcmlwdCBpbnB1dCBhbmQgZXhlY3V0ZSBsaW5lcywgd2l0aCBvciB3aXRob3V0IHByb21wdHMKIGludCBkb19zb3VyY2UoY2hhciAqbmFtZSwgRklMRSAqZmYpCiB7Ci0gIHN0cnVjdCBzaF9mdW5jdGlvbiBzY3JhdGNoOwotICBsb25nIGxpbmVubyA9IFRULmxpbmVubywgc2hpZnQgPSBUVC5zaGlmdDsKLSAgc3RydWN0IHNoX2FyZyBhcmcsICpvbGQgPSBUVC5hcmc7CisgIHN0cnVjdCBzaF9jYWxsc3RhY2sgKmNjID0geHphbGxvYyhzaXplb2Yoc3RydWN0IHNoX2NhbGxzdGFjaykpOwogICBpbnQgbW9yZSA9IDA7CiAgIGNoYXIgKm5ldzsKIAotICBhcmcuYyA9IHRveXMub3B0YzsKLSAgYXJnLnYgPSB0b3lzLm9wdGFyZ3M7Ci0gIFRULmFyZyA9ICZhcmc7Ci0gIFRULmxpbmVubyA9IFRULnNoaWZ0ID0gMDsKLSAgbWVtc2V0KCZzY3JhdGNoLCAwLCBzaXplb2Yoc2NyYXRjaCkpOworICBjYy0+bmV4dCA9IFRULmNjOworICBjYy0+YXJnLnYgPSB0b3lzLm9wdGFyZ3M7CisgIGNjLT5hcmcuYyA9IHRveXMub3B0YzsKKyAgVFQuY2MgPSBjYzsKIAotICAvLyBUT0RPOiBmYWN0b3Igb3V0IGFuZCBjb21iaW5lIHdpdGggc2hfbWFpbigpIHBsdW1iaW5nPwogICBkbyB7CiAgICAgbmV3ID0gcHJvbXB0X2dldGxpbmUoZmYsIG1vcmUrMSk7Ci0gICAgaWYgKCFUVC5saW5lbm8rKyAmJiBuZXcgJiYgIW1lbWNtcChuZXcsICJcMTc3RUxGIiwgNCkpIHsKKyAgICBpZiAoIShUVC5MSU5FTk8gPSBUVC5jYy0+bGluZW5vKyspICYmIG5ldyAmJiAhbWVtY21wKG5ldywgIlwxNzdFTEYiLCA0KSkgewogICAgICAgZXJyb3JfbXNnKCInJXMnIGlzIEVMRiIsIG5hbWUpOwogICAgICAgZnJlZShuZXcpOwogCkBAIC0zMTE5LDIxICszMTgwLDIyIEBACiAgICAgLy8gcHJpbnRzICJoZWxsbyIgdnMgImhlbGxvXCIKIAogICAgIC8vIHJldHVybnMgMCBpZiBsaW5lIGNvbnN1bWVkLCBjb21tYW5kIGlmIGl0IG5lZWRzIG1vcmUgZGF0YQotICAgIG1vcmUgPSBwYXJzZV9saW5lKG5ldyA/IDogIiAiLCAmc2NyYXRjaCk7CisgICAgbW9yZSA9IHBhcnNlX2xpbmUobmV3ID8gOiAiICIsICZjYy0+c2NyYXRjaCk7CiAgICAgaWYgKG1vcmU9PTEpIHsKICAgICAgIGlmICghbmV3ICYmICFmZikgc3ludGF4X2VycigidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwogICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoIW1vcmUpIHJ1bl9mdW5jdGlvbihzY3JhdGNoLnBpcGVsaW5lKTsKLSAgICAgIGZyZWVfZnVuY3Rpb24oJnNjcmF0Y2gpOworICAgICAgaWYgKCFtb3JlKSBydW5fZnVuY3Rpb24oY2MtPnNjcmF0Y2gucGlwZWxpbmUpOworICAgICAgZnJlZV9mdW5jdGlvbigmY2MtPnNjcmF0Y2gpOwogICAgICAgbW9yZSA9IDA7CiAgICAgfQogICAgIGZyZWUobmV3KTsKICAgfSB3aGlsZShuZXcpOwogCiAgIGlmIChmZikgZmNsb3NlKGZmKTsKLSAgVFQubGluZW5vID0gbGluZW5vOwotICBUVC5zaGlmdCA9IHNoaWZ0OwotICBUVC5hcmcgPSBvbGQ7CisgIFRULmNjID0gVFQuY2MtPm5leHQ7CisgIGZyZWVfZnVuY3Rpb24oJmNjLT5zY3JhdGNoKTsKKyAgbGxpc3RfdHJhdmVyc2UoY2MtPmRlbGV0ZSwgbGxpc3RfZnJlZV9hcmcpOworICBmcmVlKGNjKTsKIAogICByZXR1cm4gbW9yZTsKIH0KQEAgLTMxNzgsNiArMzI0MCw3IEBACiAgICAgaW5pdGxvY2FsKCJCQVNIIiwgcyk7CiAgIGluaXRsb2NhbCgiUFMyIiwgIj4gIik7CiAgIGluaXRsb2NhbCgiUFMzIiwgIiM/ICIpOworICBpbml0bG9jYWwoIlBTNCIsICIrICIpOwogCiAgIC8vIEVuc3VyZSBlbnZpcm9uIGNvcGllZCBhbmQgdG95cy5lbnZjIHNldCwgYW5kIGNsZWFuIG91dCBpbGxlZ2FsIGVudHJpZXMKICAgVFQuaWZzID0gIiBcdFxuIjsKQEAgLTMyNTcsNyArMzMyMCw3IEBACiAgIEZJTEUgKmZmOwogCiAgIHNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKLSAgVFQub3B0aW9ucyA9IE9QVF9CUkFDRTsKKyAgVFQub3B0aW9ucyA9IE9QVF9COwogCiAgIFRULnBpZCA9IGdldHBpZCgpOwogICBUVC5TRUNPTkRTID0gdGltZSgwKTsKQEAgLTMyNzQsNyArMzMzNyw4IEBACiAgICAgaWYgKCFGTEFHKGMpKSB7CiAgICAgICBpZiAodG95cy5vcHRjPT0xKSB0b3lzLm9wdGZsYWdzIHw9IEZMQUdfczsKICAgICAgIGlmIChGTEFHKHMpICYmIGlzYXR0eSgwKSkgdG95cy5vcHRmbGFncyB8PSBGTEFHX2k7Ci0gICAgfSBlbHNlIGlmICh0b3lzLm9wdGM+MSkgeworICAgIH0KKyAgICBpZiAodG95cy5vcHRjPjEpIHsKICAgICAgIHRveXMub3B0YXJncysrOwogICAgICAgdG95cy5vcHRjLS07CiAgICAgfQpAQCAtMzMwMSw3ICszMzY1LDcgQEAKIAogICAvLyBSZWFkIGFuZCBleGVjdXRlIGxpbmVzIGZyb20gZmlsZQogICBpZiAoZG9fc291cmNlKGNjID8gOiAqdG95cy5vcHRhcmdzLCBmZikpCi0gICAgZXJyb3JfZXhpdCgiJWxkOnVuZmluaXNoZWQgbGluZSIrNCohVFQubGluZW5vLCBUVC5saW5lbm8pOworICAgIGVycm9yX2V4aXQoIiV1OnVuZmluaXNoZWQgbGluZSIrMyohVFQuY2MtPmxpbmVubywgVFQuY2MtPmxpbmVubyk7CiB9CiAKIC8vIFRPRE86IC4vYmxhaC5zaCBvbmUgdHdvIHRocmVlOiBwdXQgb25lIHR3byB0aHJlZSBpbiBzY3JhdGNoLmFyZwpAQCAtMzM4Miw2ICszNDQ2LDY1IEBACiAgIGV4aXQoKnRveXMub3B0YXJncyA/IGF0b2koKnRveXMub3B0YXJncykgOiAwKTsKIH0KIAorLy8gbGliL2FyZ3MuYyBjYW4ndCArcHJlZml4ICYgIitvIGhpc3RvcnkiIG5lZWRzIHNwYWNlIHNvIHBhcnNlIGNtZGxpbmUgaGVyZQordm9pZCBzZXRfbWFpbih2b2lkKQoreworICBjaGFyICpjYywgKm9zdHJbXSA9IHsiYnJhY2VleHBhbmQiLCAibm9jbG9iYmVyIiwgInh0cmFjZSJ9OworICBpbnQgaWksIGpqLCBraywgb28gPSAwLCBkZCA9IDA7CisKKyAgaWYgKCEqdG95cy5vcHRhcmdzKSB7CisvLyBUT0RPIGVzY2FwZSBwcm9wZXJseQorICAgIGZvciAoaWkgPSAwOyBpaTxUVC52YXJzbGVuOyBpaSsrKSBwcmludGYoIiVzXG4iLCBUVC52YXJzW2lpXS5zdHIpOworCisgICAgcmV0dXJuOworICB9CisKKyAgLy8gSGFuZGxlIG9wdGlvbnMKKyAgZm9yIChpaSA9IDA7OyBpaSsrKSB7CisgICAgaWYgKChjYyA9IHRveXMub3B0YXJnc1tpaV0pICYmICEoZGQgPSBzdHJpZHgoIi0rIiwgKmNjKSsxKSAmJiBvby0tKSB7CisgICAgICBmb3IgKGpqID0gMDsgamo8QVJSQVlfTEVOKG9zdHIpOyBqaisrKSBpZiAoIXN0cmNtcChjYywgb3N0cltqal0pKSBicmVhazsKKyAgICAgIGlmIChqaiAhPSBBUlJBWV9MRU4ob3N0cikpIHsKKyAgICAgICAgaWYgKGRkPT0xKSBUVC5vcHRpb25zIHw9IE9QVF9CPDxrazsKKyAgICAgICAgZWxzZSBUVC5vcHRpb25zICY9IH4oT1BUX0I8PGtrKTsKKworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICAgIGVycm9yX2V4aXQoImJhZCAtbyAlcyIsIGNjKTsKKyAgICB9CisgICAgaWYgKG9vPjApIGZvciAoamogPSAwOyBqajxBUlJBWV9MRU4ob3N0cik7IGpqKyspCisgICAgICBwcmludGYoIiVzXHQlc1xuIiwgb3N0cltqal0sIFRULm9wdGlvbnMmKE9QVF9CPDxqaikgPyAib24iIDogIm9mZiIpOworICAgIG9vID0gMDsKKyAgICBpZiAoIWNjIHx8ICFkZCkgYnJlYWs7CisgICAgZm9yIChqaiA9IDE7IGNjW2pqXTsgamorKykgeworICAgICAgaWYgKGNjW2pqXSA9PSAnbycpIG9vKys7CisgICAgICBlbHNlIGlmICgtMSAhPSAoa2sgPSBzdHJpZHgoIkJDeCIsIGNjW2pqXSkpKSB7CisgICAgICAgIGlmICgqY2MgPT0gJy0nKSBUVC5vcHRpb25zIHw9IE9QVF9CPDxrazsKKyAgICAgICAgZWxzZSBUVC5vcHRpb25zICY9IH4oT1BUX0I8PGtrKTsKKyAgICAgIH0gZWxzZSBlcnJvcl9leGl0KCJiYWQgLSVjIiwgdG95cy5vcHRhcmdzW2lpXVsxXSk7CisgICAgfQorICB9CisKKyAgLy8gaGFuZGxlIHBvc2l0aW9uYWwgcGFyYW1ldGVycworICBpZiAoY2MpIHsKKyAgICBzdHJ1Y3QgYXJnX2xpc3QgKmFsLCAqKmhlYWQ7CisgICAgc3RydWN0IHNoX2FyZyAqYXJnID0gJlRULmNjLT5hcmc7CisKKyAgICBmb3IgKGFsID0gKihoZWFkID0gJlRULmNjLT5kZWxldGUpOyBhbDsgYWwgPSAqKGhlYWQgPSAmYWwtPm5leHQpKQorICAgICAgaWYgKGFsLT5hcmcgPT0gKHZvaWQgKilhcmctPnYpIGJyZWFrOworCisgICAgLy8gZnJlZSBsYXN0IHNldCdzIG1lbW9yeSAoaWYgYW55KSBzbyBpdCBkb2Vzbid0IGFjY3VtdWxhdGUgaW4gbG9vcAorICAgIGlmIChhbCkgZm9yIChqaiA9IGFyZy0+YysxOyBqajsgamotLSkgeworICAgICAgKmhlYWQgPSBhbC0+bmV4dDsKKyAgICAgIGZyZWUoYWwtPmFyZyk7CisgICAgICBmcmVlKGFsKTsKKyAgICB9CisKKyAgICB3aGlsZSAodG95cy5vcHRhcmdzW2lpXSkKKyAgICAgIGFyZ19hZGQoYXJnLCBwdXNoX2FyZygmVFQuY2MtPmRlbGV0ZSwgc3RyZHVwKHRveXMub3B0YXJnc1tpaSsrXSkpKTsKKyAgICBwdXNoX2FyZygmVFQuY2MtPmRlbGV0ZSwgYXJnLT52KTsKKyAgfQorfQorCiB2b2lkIHVuc2V0X21haW4odm9pZCkKIHsKICAgY2hhciAqKmFyZywgKnM7CkBAIC0zNDI4LDEyICszNTUxLDE4IEBACiAKIHZvaWQgZXZhbF9tYWluKHZvaWQpCiB7Ci0gIHN0cnVjdCBzaF9hcmcgKm9sZCA9IFRULmFyZywgbmV3ID0ge3RveXMuYXJndiwgdG95cy5vcHRjKzF9OworICBzdHJ1Y3Qgc2hfYXJnIG9sZCA9IFRULmNjLT5hcmcsICp2b2xhdGlsZSBhcmcgPSAmVFQuY2MtPmFyZzsKICAgY2hhciAqczsKIAotICBUVC5hcmcgPSAmbmV3OworICAvLyBib3Jyb3cgdGhlICQqIGV4cGFuZCBpbmZyYXN0cnVjdHVyZSAoYXZvaWRpbmcgJCogZnJvbSB0cmFwIGhhbmRsZXIgcmFjZSkuCisgIGFyZy0+YyA9IDA7CisgIGFyZy0+diA9IHRveXMuYXJndjsKKyAgYXJnLT5jID0gdG95cy5vcHRjKzE7CiAgIHMgPSBleHBhbmRfb25lX2FyZygiXCIkKlwiIiwgU0VNSV9JRlMsIDApOwotICBUVC5hcmcgPSBvbGQ7CisgIGFyZy0+YyA9IDA7CisgIGFyZy0+diA9IG9sZC52OworICBhcmctPmMgPSBvbGQuYzsKKwogICBzaF9ydW4ocyk7CiAgIGZyZWUocyk7CiB9CkBAIC0zNTU5LDE0ICszNjg4LDE0IEBACiAgIGxvbmcgbG9uZyBieSA9IDE7CiAKICAgaWYgKHRveXMub3B0YykgYnkgPSBhdG9seCgqdG95cy5vcHRhcmdzKTsKLSAgYnkgKz0gVFQuc2hpZnQ7Ci0gIGlmIChieTwwIHx8IGJ5Pj1UVC5hcmctPmMpIHRveXMuZXhpdHZhbCsrOwotICBlbHNlIFRULnNoaWZ0ID0gYnk7CisgIGJ5ICs9IFRULmNjLT5zaGlmdDsKKyAgaWYgKGJ5PDAgfHwgYnk+PVRULmNjLT5hcmcuYykgdG95cy5leGl0dmFsKys7CisgIGVsc2UgVFQuY2MtPnNoaWZ0ID0gYnk7CiB9CiAKIHZvaWQgc291cmNlX21haW4odm9pZCkKIHsKLSAgY2hhciAqbmFtZSA9ICp0b3lzLm9wdGFyZ3M7CisgIGNoYXIgKm5hbWUgPSB0b3lzLm9wdGFyZ3NbMV07CiAgIEZJTEUgKmZmID0gZnBhdGhvcGVuKG5hbWUpOwogCiAgIGlmICghZmYpIHJldHVybiBwZXJyb3JfbXNnX3JhdyhuYW1lKTsKZGlmZiAtLWdpdCBhL3RveXMvcGVuZGluZy90ci5jIGIvdG95cy9wZW5kaW5nL3RyLmMKaW5kZXggOWE4MjNmNi4uZTY4YWU0NiAxMDA2NDQKLS0tIGEvdG95cy9wZW5kaW5nL3RyLmMKKysrIGIvdG95cy9wZW5kaW5nL3RyLmMKQEAgLTIxMCwyNiArMjEwLDIxIEBACiAKIHN0YXRpYyB2b2lkIHByaW50X21hcChjaGFyICpzZXQxLCBjaGFyICpzZXQyKQogewotICBpbnQgciA9IDAsIGksIHByZXZfY2hhciA9IC0xOworICBpbnQgbiwgc3JjLCBkc3QsIHByZXYgPSAtMTsKIAotICB3aGlsZSAoMSkKLSAgewotICAgIGkgPSAwOwotICAgIHIgPSByZWFkKFNURElOX0ZJTEVOTywgKHRveWJ1ZiksIHNpemVvZih0b3lidWYpKTsKLSAgICBpZiAoIXIpIGJyZWFrOwotICAgIGZvciAoO3IgPiBpO2krKykgeworICB3aGlsZSAoKG4gPSByZWFkKDAsIHRveWJ1Ziwgc2l6ZW9mKHRveWJ1ZikpKSkgeworICAgIGlmICghRkxBRyhkKSAmJiAhRkxBRyhzKSkgeworICAgICAgZm9yIChkc3QgPSAwOyBkc3QgPCBuOyBkc3QrKykgdG95YnVmW2RzdF0gPSBUVC5tYXBbdG95YnVmW2RzdF1dOworICAgIH0gZWxzZSB7CisgICAgICBmb3IgKHNyYyA9IGRzdCA9IDA7IHNyYyA8IG47IHNyYysrKSB7CisgICAgICAgIGludCBjaCA9IFRULm1hcFt0b3lidWZbc3JjXV07CiAKLSAgICAgIGlmICgodG95cy5vcHRmbGFncyAmIEZMQUdfZCkgJiYgKFRULm1hcFsoaW50KXRveWJ1ZltpXV0gJiAweDEwMCkpIGNvbnRpbnVlOwotICAgICAgaWYgKHRveXMub3B0ZmxhZ3MgJiBGTEFHX3MpIHsKLSAgICAgICAgaWYgKChUVC5tYXBbKGludCl0b3lidWZbaV1dICYgMHgyMDApICYmCi0gICAgICAgICAgICAocHJldl9jaGFyID09IFRULm1hcFsoaW50KXRveWJ1ZltpXV0pKSB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKEZMQUcoZCkgJiYgKGNoICYgMHgxMDApKSBjb250aW51ZTsKKyAgICAgICAgaWYgKEZMQUcocykgJiYgKChjaCAmIDB4MjAwKSAmJiBwcmV2ID09IGNoKSkgY29udGludWU7CisgICAgICAgIHRveWJ1Zltkc3QrK10gPSBwcmV2ID0gY2g7CiAgICAgICB9Ci0gICAgICB4cHV0YyhUVC5tYXBbKGludCl0b3lidWZbaV1dICYgMHhGRik7Ci0gICAgICBwcmV2X2NoYXIgPSBUVC5tYXBbKGludCl0b3lidWZbaV1dOwotICAgICAgZmZsdXNoKHN0ZG91dCk7CiAgICAgfQorICAgIHh3cml0ZSgxLCB0b3lidWYsIGRzdCk7CiAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvdG95cy9wZW5kaW5nL3VuaWNvZGUuYyBiL3RveXMvcGVuZGluZy91bmljb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5ZWIyNAotLS0gL2Rldi9udWxsCisrKyBiL3RveXMvcGVuZGluZy91bmljb2RlLmMKQEAgLTAsMCArMSw2NSBAQAorLyogdW5pY29kZS5jIC0gY29udmVydCBiZXR3ZWVuIFVuaWNvZGUgYW5kIFVURi04CisgKgorICogQ29weXJpZ2h0IDIwMjAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdC4KKyAqCisgKiBMb29zZWx5IGJhc2VkIG9uIHRoZSBQbGFuOS9JbmZlcm5vIHVuaWNvZGUoMSkuCisKK1VTRV9VTklDT0RFKE5FV1RPWSh1bmljb2RlLCAiPDEiLCBUT1lGTEFHX1VTUnxUT1lGTEFHX0JJTikpCisKK2NvbmZpZyBVTklDT0RFCisgIGJvb2wgInVuaWNvZGUiCisgIGRlZmF1bHQgbgorICBoZWxwCisgICAgdXNhZ2U6IHVuaWNvZGUgW1ttaW5dLW1heF0KKworICAgIENvbnZlcnQgYmV0d2VlbiBVbmljb2RlIGNvZGUgcG9pbnRzIGFuZCBVVEYtOCwgaW4gYm90aCBkaXJlY3Rpb25zLgorKi8KKworI2RlZmluZSBGT1JfdW5pY29kZQorI2luY2x1ZGUgInRveXMuaCIKKworc3RhdGljIHZvaWQgY29kZXBvaW50KHVuc2lnbmVkIHdjKSB7CisgIGNoYXIgKmxvdz0iTlVMU09IU1RYRVRYRU9URU5RQUNLQkVMQlMgSFQgTEYgVlQgRkYgQ1IgU08gU0kgRExFREMxREMyREMzREM0IgorICAgICAgICAgICAgIk5BS1NZTkVUQkNBTkVNIFNVQkVTQ0ZTIEdTIFJTIFVTICI7CisgIHVuc2lnbmVkIG4sIGk7CisKKyAgcHJpbnRmKCJVKyUwNFggOiAiLCB3Yyk7CisgIGlmICh3YyA8ICcgJykgcHJpbnRmKCIlLjNzIiwgbG93Kyh3YyozKSk7CisgIGVsc2UgaWYgKHdjID09IDB4N2YpIHByaW50ZigiREVMIik7CisgIGVsc2UgeworICAgIHRveWJ1ZltuID0gd2N0b3V0ZjgodG95YnVmLCB3YyldID0gMDsKKyAgICBwcmludGYoIiVzJXMiLCB0b3lidWYsIG4+MSA/ICIgOiI6IiIpOworICAgIGlmIChuPjEpIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHByaW50ZigiICUjMDJ4IiwgdG95YnVmW2ldKTsKKyAgfQorICB4cHV0YygnXG4nKTsKK30KKwordm9pZCB1bmljb2RlX21haW4odm9pZCkKK3sKKyAgdW5zaWduZWQgZnJvbSwgdG87CisgIGNoYXIgbmV4dCwgKiphcmdzOworCisgIGZvciAoYXJncyA9IHRveXMub3B0YXJnczsgKmFyZ3M7IGFyZ3MrKykgeworICAgIC8vIHVuaWNvZGUgNjYwLTY2NiA9PiB0YWJsZSBvZiBgVSswNjAwIDog2aAgOiAweGQ5IDB4YTBgIGV0Yy4KKyAgICBpZiAoc3NjYW5mKCphcmdzLCAiJXgtJXglYyIsICZmcm9tLCAmdG8sICZuZXh0KSA9PSAyKSB7CisgICAgICB3aGlsZSAoZnJvbSA8PSB0bykgY29kZXBvaW50KGZyb20rKyk7CisKKyAgICAvLyB1bmljb2RlIDY2NiA9PiBqdXN0IGBVKzA2NjYgOiDZpiA6IDB4ZDkgMHhhNmAuCisgICAgfSBlbHNlIGlmIChzc2NhbmYoKmFyZ3MsICIleCVjIiwgJmZyb20sICZuZXh0KSA9PSAxKSB7CisgICAgICBjb2RlcG9pbnQoZnJvbSk7CisKKyAgICAvLyB1bmljb2RlIGhlbGxvID0+IHRhYmxlIHNob3dpbmcgZXZlcnkgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuCisgICAgfSBlbHNlIHsKKyAgICAgIGNoYXIgKnMgPSAqYXJnczsKKyAgICAgIHNpemVfdCBsID0gc3RybGVuKHMpOworICAgICAgd2NoYXJfdCB3YzsKKyAgICAgIGludCBuOworCisgICAgICB3aGlsZSAoKG4gPSB1dGY4dG93Yygmd2MsIHMsIGwpKSA+IDApIHsKKyAgICAgICAgY29kZXBvaW50KHdjKTsKKyAgICAgICAgcyArPSBuOworICAgICAgICBsIC09IG47CisgICAgICB9CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS90b3lzL3Bvc2l4L2NobW9kLmMgYi90b3lzL3Bvc2l4L2NobW9kLmMKaW5kZXggMzY0NWViYy4uMmNkZGE5NSAxMDA2NDQKLS0tIGEvdG95cy9wb3NpeC9jaG1vZC5jCisrKyBiL3RveXMvcG9zaXgvY2htb2QuYwpAQCAtMTksNyArMTksNyBAQAogICAgIFN0YW56YXMgYXJlIGFwcGxpZWQgaW4gb3JkZXI6IEZvciBlYWNoIGNhdGVnb3J5ICh1ID0gdXNlciwKICAgICBnID0gZ3JvdXAsIG8gPSBvdGhlciwgYSA9IGFsbCB0aHJlZSwgaWYgbm9uZSBzcGVjaWZpZWQgZGVmYXVsdCBpcyBhKSwKICAgICBzZXQgKCspLCBjbGVhciAoLSksIG9yIGNvcHkgKD0pLCByID0gcmVhZCwgdyA9IHdyaXRlLCB4ID0gZXhlY3V0ZS4KLSAgICBzID0gdStzID0gc3VpZCwgZytzID0gc2dpZCwgbytzID0gc3RpY2t5LiAoK3QgaXMgYW4gYWxpYXMgZm9yIG8rcykuCisgICAgcyA9IHUrcyA9IHN1aWQsIGcrcyA9IHNnaWQsICt0ID0gc3RpY2t5LiAobytzIGlnbm9yZWQgc28gYStzIGRvZXNuJ3Qgc2V0ICt0KQogICAgIHN1aWQvc2dpZDogZXhlY3V0ZSBhcyB0aGUgdXNlci9ncm91cCB3aG8gb3ducyB0aGUgZmlsZS4KICAgICBzdGlja3k6IGNhbid0IGRlbGV0ZSBmaWxlcyB5b3UgZG9uJ3Qgb3duIG91dCBvZiB0aGlzIGRpcmVjdG9yeQogICAgIFggPSB4IGZvciBkaXJlY3RvcmllcyBvciBpZiBhbnkgY2F0ZWdvcnkgYWxyZWFkeSBoYXMgeCBzZXQuCkBAIC01MCw3ICs1MCw3IEBACiAgICAgLy8gc3ltbGlua3MgbWVudGlvbmVkIGRpcmVjdGx5IGFzIGFyZ3VtZW50cy4gV2UnbGwgZmFpbCwgb2YgY291cnNlLAogICAgIC8vIGJ1dCB0aGF0J3Mgd2hhdCB5b3UgYXNrZWQgZm9yIGluIHRoYXQgY2FzZS4KICAgfSBlbHNlIHsKLSAgICBtb2RlID0gc3RyaW5nX3RvX21vZGUoVFQubW9kZSwgdHJ5LT5zdC5zdF9tb2RlKTsKKyAgICBtb2RlID0gc3RyaW5nX3RvX21vZGUoVFQubW9kZSwgdHJ5LT5zdC5zdF9tb2RlICYgflNfSUZNVCk7CiAgICAgaWYgKEZMQUcodikpIHsKICAgICAgIGNoYXIgKnMgPSBkaXJ0cmVlX3BhdGgodHJ5LCAwKTsKIApkaWZmIC0tZ2l0IGEvdG95cy9wb3NpeC9leHBhbmQuYyBiL3RveXMvcG9zaXgvZXhwYW5kLmMKaW5kZXggZjFmZDhkMy4uZjNjZDQ0ZCAxMDA2NDQKLS0tIGEvdG95cy9wb3NpeC9leHBhbmQuYworKysgYi90b3lzL3Bvc2l4L2V4cGFuZC5jCkBAIC00MywyMiArNDMsMTggQEAKICAgICB9CiAgICAgaWYgKCFsZW4pIGJyZWFrOwogICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSB7Ci0gICAgICBpbnQgd2lkdGggPSAxOworICAgICAgd2NoYXJfdCBibGFoOworICAgICAgaW50IHdpZHRoID0gdXRmOHRvd2MoJmJsYWgsIHRveWJ1ZitpLCBsZW4taSk7CiAgICAgICBjaGFyIGM7CiAKLSAgICAgIGlmIChDRkdfVE9ZQk9YX0kxOE4pIHsKLSAgICAgICAgd2NoYXJfdCBibGFoOwotCi0gICAgICAgIHdpZHRoID0gdXRmOHRvd2MoJmJsYWgsIHRveWJ1ZitpLCBsZW4taSk7Ci0gICAgICAgIGlmICh3aWR0aCA+IDEpIHsKLSAgICAgICAgICBpZiAod2lkdGggIT0gZndyaXRlKHRveWJ1ZitpLCB3aWR0aCwgMSwgc3Rkb3V0KSkKLSAgICAgICAgICAgIHBlcnJvcl9leGl0KCJzdGRvdXQiKTsKLSAgICAgICAgICBpICs9IHdpZHRoLTE7Ci0gICAgICAgICAgeCsrOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID09IC0yKSBicmVhazsKLSAgICAgICAgZWxzZSBpZiAod2lkdGggPT0gLTEpIGNvbnRpbnVlOwotICAgICAgfQorICAgICAgaWYgKHdpZHRoID4gMSkgeworICAgICAgICBpZiAod2lkdGggIT0gZndyaXRlKHRveWJ1ZitpLCB3aWR0aCwgMSwgc3Rkb3V0KSkKKyAgICAgICAgICBwZXJyb3JfZXhpdCgic3Rkb3V0Iik7CisgICAgICAgIGkgKz0gd2lkdGgtMTsKKyAgICAgICAgeCsrOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0gZWxzZSBpZiAod2lkdGggPT0gLTIpIGJyZWFrOworICAgICAgZWxzZSBpZiAod2lkdGggPT0gLTEpIGNvbnRpbnVlOwogICAgICAgYyA9IHRveWJ1ZltpXTsKIAogICAgICAgaWYgKGMgIT0gJ1x0JykgewpkaWZmIC0tZ2l0IGEvdG95cy9wb3NpeC9maW5kLmMgYi90b3lzL3Bvc2l4L2ZpbmQuYwppbmRleCBmZjEyN2I5Li4yZDhjYTBiIDEwMDY0NAotLS0gYS90b3lzL3Bvc2l4L2ZpbmQuYworKysgYi90b3lzL3Bvc2l4L2ZpbmQuYwpAQCAtNjkwLDcgKzY5MCw3IEBACiAKICAgLy8gRGlzdGluZ3Vpc2ggcGF0aHMgZnJvbSBmaWx0ZXJzCiAgIGZvciAobGVuID0gMDsgdG95cy5vcHRhcmdzW2xlbl07IGxlbisrKQotICAgIGlmIChzdHJjaHIoIi0hKCIsICp0b3lzLm9wdGFyZ3NbbGVuXSkpIGJyZWFrOworICAgIGlmICgqdG95cy5vcHRhcmdzW2xlbl0gJiYgc3RyY2hyKCItISgiLCAqdG95cy5vcHRhcmdzW2xlbl0pKSBicmVhazsKICAgVFQuZmlsdGVyID0gdG95cy5vcHRhcmdzK2xlbjsKIAogICAvLyB1c2UgIi4iIGlmIG5vIHBhdGhzCmRpZmYgLS1naXQgYS90b3lzL3Bvc2l4L2dyZXAuYyBiL3RveXMvcG9zaXgvZ3JlcC5jCmluZGV4IDlmNDQ1ZmMuLmZjZThkNTYgMTAwNjQ0Ci0tLSBhL3RveXMvcG9zaXgvZ3JlcC5jCisrKyBiL3RveXMvcG9zaXgvZ3JlcC5jCkBAIC0xMCw5ICsxMCw5IEBACiAqIGVjaG8gaGVsbG8gfCBncmVwIC1mIDwvZGV2L251bGwKICoKIAotVVNFX0dSRVAoTkVXVE9ZKGdyZXAsICIobGluZS1idWZmZXJlZCkoY29sb3IpOjsoZXhjbHVkZS1kaXIpKlMoZXhjbHVkZSkqTShpbmNsdWRlKSpaekVGSElhYihieXRlLW9mZnNldCloKG5vLWZpbGVuYW1lKWlubyhvbmx5LW1hdGNoaW5nKXJSc3Z3Y2woZmlsZXMtd2l0aC1tYXRjaGVzKXEocXVpZXQpKHNpbGVudCllKmYqQyNCI0EjbSN4WyF3eF1bIUVGd10iLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMikpKQotVVNFX0VHUkVQKE9MRFRPWShlZ3JlcCwgZ3JlcCwgVE9ZRkxBR19CSU58VE9ZRkxBR19BUkdGQUlMKDIpKSkKLVVTRV9GR1JFUChPTERUT1koZmdyZXAsIGdyZXAsIFRPWUZMQUdfQklOfFRPWUZMQUdfQVJHRkFJTCgyKSkpCitVU0VfR1JFUChORVdUT1koZ3JlcCwgIihsaW5lLWJ1ZmZlcmVkKShjb2xvcik6OyhleGNsdWRlLWRpcikqUyhleGNsdWRlKSpNKGluY2x1ZGUpKlp6RUZISWFiKGJ5dGUtb2Zmc2V0KWgobm8tZmlsZW5hbWUpaW5vKG9ubHktbWF0Y2hpbmcpclJzdndjbChmaWxlcy13aXRoLW1hdGNoZXMpcShxdWlldCkoc2lsZW50KWUqZipDI0IjQSNtI3hbIXd4XVshRUZ3XSIsIFRPWUZMQUdfQklOfFRPWUZMQUdfQVJHRkFJTCgyKXxUT1lGTEFHX0xJTkVCVUYpKQorVVNFX0VHUkVQKE9MRFRPWShlZ3JlcCwgZ3JlcCwgVE9ZRkxBR19CSU58VE9ZRkxBR19BUkdGQUlMKDIpfFRPWUZMQUdfTElORUJVRikpCitVU0VfRkdSRVAoT0xEVE9ZKGZncmVwLCBncmVwLCBUT1lGTEFHX0JJTnxUT1lGTEFHX0FSR0ZBSUwoMil8VE9ZRkxBR19MSU5FQlVGKSkKIAogY29uZmlnIEdSRVAKICAgYm9vbCAiZ3JlcCIKZGlmZiAtLWdpdCBhL3RveXMvcG9zaXgvc2VkLmMgYi90b3lzL3Bvc2l4L3NlZC5jCmluZGV4IDhmYmVmMGMuLjliZDA1MDMgMTAwNjQ0Ci0tLSBhL3RveXMvcG9zaXgvc2VkLmMKKysrIGIvdG95cy9wb3NpeC9zZWQuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgIGludCBybWF0Y2hbMl07ICAvLyBvZmZzZXQgb2YgcmVnZXggc3RydWN0IGZvciBwcmVmaXggbWF0Y2hlcyAoL2FiYy8sL2RlZi9wKQogICBpbnQgYXJnMSwgYXJnMiwgdzsgLy8gb2Zmc2V0IG9mIHR3byBhcmd1bWVudHMgcGVyIGNvbW1hbmQsIHBsdXMgcy8vdyBmaWxlbmFtZQogICB1bnNpZ25lZCBub3QsIGhpdDsKLSAgdW5zaWduZWQgc2ZsYWdzOyAvLyBzLy8vZmxhZyBiaXRzOiBpPTEsIGc9MiwgcD00CisgIHVuc2lnbmVkIHNmbGFnczsgLy8gcy8vL2ZsYWcgYml0czogaT0xLCBnPTIsIHA9NCwgeD04CiAgIGNoYXIgYzsgLy8gYWN0aW9uCiB9OwogCkBAIC00NDEsNyArNDQxLDcgQEAKICAgICAgICAgfSBlbHNlIHptYXRjaCA9IDA7CiAKICAgICAgICAgLy8gSWYgd2UncmUgcmVwbGFjaW5nIG9ubHkgYSBzcGVjaWZpYyBtYXRjaCwgc2tpcCBpZiB0aGlzIGlzbid0IGl0Ci0gICAgICAgIG9mZiA9IGNvbW1hbmQtPnNmbGFncz4+MzsKKyAgICAgICAgb2ZmID0gY29tbWFuZC0+c2ZsYWdzPj40OwogICAgICAgICBpZiAob2ZmICYmIG9mZiAhPSArK2NvdW50KSB7CiAgICAgICAgICAgbWVtY3B5KGwyK2wydXNlZCwgcmxpbmUsIG1hdGNoWzBdLnJtX2VvKTsKICAgICAgICAgICBsMnVzZWQgKz0gbWF0Y2hbMF0ucm1fZW87CkBAIC03OTMsNiArNzkzLDcgQEAKICAgICAgIGlmICghVFQubmV4dGxlbi0tKSBicmVhazsKICAgICB9IGVsc2UgaWYgKGMgPT0gJ3MnKSB7CiAgICAgICBjaGFyICplbmQsIGRlbGltID0gMDsKKyAgICAgIGludCBmbGFnczsKIAogICAgICAgLy8gcy9wYXR0ZXJuL3JlcGxhY2VtZW50L2ZsYWdzCiAKQEAgLTg0NSwxOSArODQ2LDIwIEBACiAKICAgICAgICAgaWYgKGlzc3BhY2UoKmxpbmUpICYmICpsaW5lICE9ICdcbicpIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICgwIDw9IChsID0gc3RyaWR4KCJpZ3AiLCAqbGluZSkpKSBjb21tYW5kLT5zZmxhZ3MgfD0gMTw8bDsKKyAgICAgICAgaWYgKDAgPD0gKGwgPSBzdHJpZHgoImlncHgiLCAqbGluZSkpKSBjb21tYW5kLT5zZmxhZ3MgfD0gMTw8bDsKICAgICAgICAgZWxzZSBpZiAoKmxpbmUgPT0gJ0knKSBjb21tYW5kLT5zZmxhZ3MgfD0gMTw8MDsKLSAgICAgICAgZWxzZSBpZiAoIShjb21tYW5kLT5zZmxhZ3M+PjMpICYmIDA8KGwgPSBzdHJ0b2wobGluZSwgJmxpbmUsIDEwKSkpIHsKLSAgICAgICAgICBjb21tYW5kLT5zZmxhZ3MgfD0gbCA8PCAzOworICAgICAgICBlbHNlIGlmICghKGNvbW1hbmQtPnNmbGFncz4+NCkgJiYgMDwobCA9IHN0cnRvbChsaW5lLCAmbGluZSwgMTApKSkgeworICAgICAgICAgIGNvbW1hbmQtPnNmbGFncyB8PSBsIDw8IDQ7CiAgICAgICAgICAgbGluZS0tOwogICAgICAgICB9IGVsc2UgYnJlYWs7CiAgICAgICB9CisgICAgICBmbGFncyA9IChGTEFHKHIpIHx8IChjb21tYW5kLT5zZmxhZ3MmOCkpID8gUkVHX0VYVEVOREVEIDogMDsKKyAgICAgIGlmIChjb21tYW5kLT5zZmxhZ3MmMSkgZmxhZ3MgfD0gUkVHX0lDQVNFOwogCiAgICAgICAvLyBXZSBkZWZlcnJlZCBhY3R1YWxseSBwYXJzaW5nIHRoZSByZWdleCB1bnRpbCB3ZSBoYWQgdGhlIHMvLy9pIGZsYWcKICAgICAgIC8vIGFsbG9jYXRpbmcgdGhlIHNwYWNlIHdhcyBkb25lIGJ5IGV4dGVuZF9zdHJpbmcoKSBhYm92ZQogICAgICAgaWYgKCEqVFQucmVtZW1iZXIpIGNvbW1hbmQtPmFyZzEgPSAwOwotICAgICAgZWxzZSB4cmVnY29tcCgodm9pZCAqKShjb21tYW5kLT5hcmcxICsgKGNoYXIgKiljb21tYW5kKSwgVFQucmVtZW1iZXIsCi0gICAgICAgIChSRUdfRVhURU5ERUQqISFGTEFHKHIpKXwoKGNvbW1hbmQtPnNmbGFncyYxKSpSRUdfSUNBU0UpKTsKKyAgICAgIGVsc2UgeHJlZ2NvbXAoKHZvaWQgKikoY29tbWFuZC0+YXJnMSsoY2hhciAqKWNvbW1hbmQpLFRULnJlbWVtYmVyLGZsYWdzKTsKICAgICAgIGZyZWUoVFQucmVtZW1iZXIpOwogICAgICAgVFQucmVtZW1iZXIgPSAwOwogICAgICAgaWYgKCpsaW5lID09ICd3JykgewpkaWZmIC0tZ2l0IGEvdG95cy9wb3NpeC90ZWUuYyBiL3RveXMvcG9zaXgvdGVlLmMKaW5kZXggNDM1Mjk0Mi4uODhmNzM2MSAxMDA2NDQKLS0tIGEvdG95cy9wb3NpeC90ZWUuYworKysgYi90b3lzL3Bvc2l4L3RlZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAKIEdMT0JBTFMoCiAgIHZvaWQgKm91dHB1dHM7CisgIGludCBvdXQ7CiApCiAKIHN0cnVjdCBmZF9saXN0IHsKQEAgLTM5LDMzICs0MCwyNyBAQAogCiAgIHRlbXAgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZmRfbGlzdCkpOwogICB0ZW1wLT5uZXh0ID0gVFQub3V0cHV0czsKLSAgdGVtcC0+ZmQgPSBmZDsKKyAgaWYgKDEgPT0gKHRlbXAtPmZkID0gZmQpKSBUVC5vdXQrKzsKICAgVFQub3V0cHV0cyA9IHRlbXA7CiB9CiAKIHZvaWQgdGVlX21haW4odm9pZCkKIHsKKyAgc3RydWN0IGZkX2xpc3QgKmZkbDsKKyAgaW50IGxlbjsKKwogICBpZiAoRkxBRyhpKSkgeHNpZ25hbChTSUdJTlQsIFNJR19JR04pOwogCi0gIC8vIE9wZW4gb3V0cHV0IGZpbGVzCisgIC8vIE9wZW4gb3V0cHV0IGZpbGVzIChwbHVzIHN0ZG91dCBpZiBub3QgYWxyZWFkeSBpbiBvdXRwdXQgbGlzdCkKICAgbG9vcGZpbGVzX3J3KHRveXMub3B0YXJncywKICAgICBPX1JEV1J8T19DUkVBVHxXQVJOX09OTFl8KEZMQUcoYSk/T19BUFBFTkQ6T19UUlVOQyksCiAgICAgMDY2NiwgZG9fdGVlX29wZW4pOworICBpZiAoIVRULm91dCkgZG9fdGVlX29wZW4oMSwgMCk7CiAKKyAgLy8gUmVhZCBkYXRhIGZyb20gc3RkaW4sIHdyaXRlIHRvIGVhY2ggb3V0cHV0IGZpbGUuCiAgIGZvciAoOzspIHsKLSAgICBzdHJ1Y3QgZmRfbGlzdCAqZmRsOwotICAgIGludCBsZW4sIG91dCA9IDA7Ci0KLSAgICAvLyBSZWFkIGRhdGEgZnJvbSBzdGRpbgotICAgIGxlbiA9IHhyZWFkKDAsIHRveWJ1Ziwgc2l6ZW9mKHRveWJ1ZikpOwotICAgIGlmIChsZW48MSkgYnJlYWs7Ci0KLSAgICAvLyBXcml0ZSBkYXRhIHRvIGVhY2ggb3V0cHV0IGZpbGUsIHBsdXMgc3Rkb3V0LgotICAgIGZvciAoZmRsID0gVFQub3V0cHV0czsgO2ZkbCA9IGZkbC0+bmV4dCkgewotICAgICAgaWYgKCFmZGwgJiYgb3V0KSBicmVhazsKLSAgICAgIGlmIChsZW4gIT0gd3JpdGVhbGwoZmRsID8gZmRsLT5mZCA6IDEsIHRveWJ1ZiwgbGVuKSkgdG95cy5leGl0dmFsPTE7Ci0gICAgICBpZiAoIWZkbCkgYnJlYWs7Ci0gICAgICBpZiAoZmRsLT5mZCA9PSAxKSBvdXQrKzsKLSAgICB9CisgICAgaWYgKDE+KGxlbiA9IHhyZWFkKDAsIHRveWJ1Ziwgc2l6ZW9mKHRveWJ1ZikpKSkgYnJlYWs7CisgICAgZm9yIChmZGwgPSBUVC5vdXRwdXRzOyBmZGw7ZmRsID0gZmRsLT5uZXh0KQorICAgICAgaWYgKGxlbiAhPSB3cml0ZWFsbChmZGwtPmZkLCB0b3lidWYsIGxlbikpIHRveXMuZXhpdHZhbCA9IDE7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL3RveXMvcG9zaXgvdGVzdC5jIGIvdG95cy9wb3NpeC90ZXN0LmMKaW5kZXggY2Y2ZTFmNS4uZDRiYzE4NCAxMDA2NDQKLS0tIGEvdG95cy9wb3NpeC90ZXN0LmMKKysrIGIvdG95cy9wb3NpeC90ZXN0LmMKQEAgLTUsNyArNSw3IEBACiAgKiBTZWUgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL3Rlc3QuaHRtbAogCiBVU0VfVEVTVChORVdUT1kodGVzdCwgMCwgVE9ZRkxBR19VU1J8VE9ZRkxBR19CSU58VE9ZRkxBR19OT0hFTFB8VE9ZRkxBR19NQVlGT1JLKSkKLVVTRV9URVNUKE9MRFRPWShbLCB0ZXN0LCBUT1lGTEFHX05PRk9SS3xUT1lGTEFHX05PSEVMUCkpCitVU0VfU0goT0xEVE9ZKFssIHRlc3QsIFRPWUZMQUdfTk9GT1JLfFRPWUZMQUdfTk9IRUxQKSkKIAogY29uZmlnIFRFU1QKICAgYm9vbCAidGVzdCIKQEAgLTIwLDcgKzIwLDcgQEAKICAgICAgIC1iICBibG9jayBkZXZpY2UgICAtZiAgcmVndWxhciBmaWxlICAgLXAgIGZpZm8gICAgICAgICAgIC11ICBzZXR1aWQgYml0CiAgICAgICAtYyAgY2hhciBkZXZpY2UgICAgLWcgIHNldGdpZCAgICAgICAgIC1yICByZWFkIGJpdCAgICAgICAtdyAgd3JpdGUgYml0CiAgICAgICAtZCAgZGlyZWN0b3J5ICAgICAgLWggIHN5bWxpbmsgICAgICAgIC1TICBzb2NrZXQgICAgICAgICAteCAgZXhlY3V0ZSBiaXQKLSAgICAgIC1lICBleGlzdHMgICAgICAgICAtTCAgc3ltbGluayAgICAgICAgLXMgIG5vbnplcm8gc2l6ZQorICAgICAgLWUgIGV4aXN0cyAgICAgICAgIC1MICBzeW1saW5rICAgICAgICAtcyAgbm9uemVybyBzaXplICAgLWsgIHN0aWNreSBiaXQKICAgICBTVFJJTkcgaXM6CiAgICAgICAtbiAgbm9uemVybyBzaXplICAgLXogIHplcm8gc2l6ZSAgICAgIChTVFJJTkcgYnkgaXRzZWxmIGltcGxpZXMgLW4pCiAgICAgRkQgKGludGVnZXIgZmlsZSBkZXNjcmlwdG9yKSBpczoKQEAgLTY2LDE2ICs2NiwxNiBAQAogICBpZiAoKmNvdW50Pj0yICYmICpzID09ICctJyAmJiBzWzFdICYmICFzWzJdKSB7CiAgICAgKmNvdW50ID0gMjsKICAgICBjID0gc1sxXTsKLSAgICBpZiAoLTEgIT0gKGkgPSBzdHJpZHgoImhMYmNkZWZncFN1c3h3ciIsIGMpKSkgeworICAgIGlmICgtMSAhPSAoaSA9IHN0cmlkeCgiaExiY2RlZmdrcFN1c3h3ciIsIGMpKSkgewogICAgICAgc3RydWN0IHN0YXQgc3Q7CiAKICAgICAgIC8vIHN0YXQgb3IgbHN0YXQsIHRoZW4gaGFuZGxlIHJ3eCBhbmQgcwogICAgICAgaWYgKC0xID09ICgoaTwyKSA/IGxzdGF0IDogc3RhdCkoYXJnc1sxXSwgJnN0KSkgcmV0dXJuIDA7Ci0gICAgICBpZiAoaT49MTIpIHJldHVybiAhIShzdC5zdF9tb2RlJigweDExMTw8KGktMTIpKSk7CisgICAgICBpZiAoaT49MTMpIHJldHVybiAhIShzdC5zdF9tb2RlJigwMTExPDwoaS0xMykpKTsKICAgICAgIGlmIChjID09ICdzJykgcmV0dXJuICEhc3Quc3Rfc2l6ZTsgLy8gb3RoZXJ3aXNlIDE8PDMyID09IDAKIAogICAgICAgLy8gaGFuZGxlIGZpbGUgdHlwZSBjaGVja2luZyBhbmQgU1VJRC9TR0lECi0gICAgICBpZiAoKGkgPSAodW5zaWduZWQgc2hvcnQgW10pezgwLDgwLDQ4LDE2LDMyLDAsNjQsMiw4LDk2LDR9W2ldPDw5KT49NDA5NikKKyAgICAgIGlmICgoaSA9ICgoY2hhciBbXSl7ODAsODAsNDgsMTYsMzIsMCw2NCwyLDEsOCw5Niw0fVtpXSk8PDkpPj00MDk2KQogICAgICAgICByZXR1cm4gKHN0LnN0X21vZGUmU19JRk1UKSA9PSBpOwogICAgICAgZWxzZSByZXR1cm4gKHN0LnN0X21vZGUgJiBpKSA9PSBpOwogICAgIH0gZWxzZSBpZiAoYyA9PSAneicpIHJldHVybiAhKmFyZ3NbMV07CmRpZmYgLS1naXQgYS93d3cvZmFxLmh0bWwgYi93d3cvZmFxLmh0bWwKaW5kZXggNjcwNGNjNS4uODAzZDdiNSAxMDA3NTUKLS0tIGEvd3d3L2ZhcS5odG1sCisrKyBiL3d3dy9mYXEuaHRtbApAQCAtNTYsMTUgKzU2LDE1IEBACiBpdCB0byBBbmRyb2lkJ3MgYXR0ZW50aW9uPC9hPiwgYW5kIHRoZXkKIDxhIGhyZWY9aHR0cHM6Ly9sd24ubmV0L0FydGljbGVzLzYyOTM2Mi8+bWVyZ2VkIGl0PC9hPiBpbnRvIEFuZHJvaWQgTS48L3A+CiAKLTxwPlRoZSBhbnN3ZXIgdG8gdGhlIHNlY29uZCBxdWVzdGlvbiBpcyAibGljZW5zaW5nIi4gQnVzeUJveCBwcmVkYXRlcyBBbmRyb2lkCi1ieSBhbG1vc3QgYSBkZWNhZGUgYnV0IEFuZHJvaWQgc3RpbGwgZG9lc24ndCBzaGlwIHdpdGggaXQgYmVjYXVzZSBHUEx2MyBjYW1lCis8cD5UaGUgdW5maXhhYmxlIHByb2JsZW0gd2l0aCBidXN5Ym94IHdhcyBsaWNlbnNpbmc6IEJ1c3lCb3ggcHJlZGF0ZXMgQW5kcm9pZAorYnkgYWxtb3N0IGEgZGVjYWRlLCBidXQgQW5kcm9pZCBzdGlsbCBkb2Vzbid0IHNoaXAgd2l0aCBpdCBiZWNhdXNlIEdQTHYzIGNhbWUKIG91dCBhcm91bmQgdGhlIHNhbWUgdGltZSBBbmRyb2lkIGRpZCBhbmQgY2F1c2VkIG1hbnkgcGVvcGxlIHRvIHRocm93CiBvdXQgdGhlIEdQTHYyIGJhYnkgd2l0aCB0aGUgR1BMdjMgYmF0aHdhdGVyLgogQW5kcm9pZCA8YSBocmVmPWh0dHBzOi8vc291cmNlLmFuZHJvaWQuY29tL3NvdXJjZS9saWNlbnNlcy5odG1sPmV4cGxpY2l0bHkKIGRpc2NvdXJhZ2VzPC9hPiB1c2Ugb2YgR1BMIGFuZCBMR1BMIGxpY2Vuc2VzIGluIGl0cyBwcm9kdWN0cywgYW5kIGhhcyBncmFkdWFsbHkKLXJlaW1wbGVtZW50ZWQgaGlzdG9yaWNhbCBHUEwgY29tcG9uZW50cyBzdWNoIGFzIGl0cyBibHVldG9vdGggc3RhY2sgdW5kZXIgdGhlCi1BcGFjaGUgbGljZW5zZS4gQXBwbGUncyBldmVuCi08YSBocmVmPWh0dHA6Ly9tZXRhLmF0aDAuY29tLzIwMTIvMDIvMDUvYXBwbGVzLWdyZWF0LWdwbC1wdXJnZS8+bW9yZSBwcm9ub3VuY2VkPC9hPiByZXNwb25zZSB3YXMgdG8gZnJlZXplIHhjb2RlIGF0IHRoZSBsYXN0IEdQTHYyIHJlbGVhc2VzCityZWltcGxlbWVudGVkIGhpc3RvcmljYWwgR1BMIGNvbXBvbmVudHMgKHN1Y2ggYXMgaXRzIGJsdWV0b290aCBzdGFjaykgdW5kZXIgdGhlCitBcGFjaGUgbGljZW5zZS4gQXBwbGUncworPGEgaHJlZj1odHRwOi8vbWV0YS5hdGgwLmNvbS8yMDEyLzAyLzA1L2FwcGxlcy1ncmVhdC1ncGwtcHVyZ2UvPmxlc3Mgc3VidGxlPC9hPiByZXNwb25zZSB3YXMgdG8gZnJlZXplIHhjb2RlIGF0IHRoZSBsYXN0IEdQTHYyIHJlbGVhc2VzCiAoR0NDIDQuMi4xIHdpdGggYmludXRpbHMgMi4xNykgZm9yIG92ZXIgNSB5ZWFycyB3aGlsZSBzcG9uc29yaW5nIHRoZQogZGV2ZWxvcG1lbnQgb2YgbmV3IHByb2plY3RzIChjbGFuZy9sbHZtL2xsZCkgdG8gcmVwbGFjZSB0aGVtLAogaW1wbGVtZW50aW5nIGEKQEAgLTUzMCw3ICs1MzAsOCBAQAogPHA+VG95Ym94IGlzIHRlc3RlZCBhZ2FpbnN0IHR3byBjb21waWxlcnMgKGxsdm0sIGdjYykgYW5kIHRocmVlIEMgbGlicmFyaWVzCiAoYmlvbmljLCBtdXNsLCBnbGliYykgaW4gdGhlIGZvbGxvd2luZyBjb21iaW5hdGlvbnM6PC9wPgogCi08cD48dT4xKSBnY2MrZ2xpYmMgPSBob3N0IHRvb2xjaGFpbjwvdT48L3A+Cis8YSBuYW1lPSJjcm9zczEiIC8+Cis8cD48YSBocmVmPSIjY3Jvc3MxIj4xKSBnY2MrZ2xpYmMgPSBob3N0IHRvb2xjaGFpbjwvYT48L3A+CiAKIDxwPk1vc3QgTGludXggZGlzdHJvcyBjb21lIHdpdGggdGhhdCBhcyBhIGhvc3QgY29tcGlsZXIsIHdoaWNoIGlzIHVzZWQgYnkKIGRlZmF1bHQgd2hlbiB5b3UgYnVpbGQgbm9ybWFsbHkKQEAgLTU1NSw3ICs1NTYsOCBAQAogbWFpbnRhaW5lciwgaWYgdGhhdCdzIGFuIGltcHJvdmVtZW50LiAoQXMgd2l0aCBXaW5kb3dzIGFuZAogQ29ib2wsIG1vc3QgcGVvcGxlIGRlYWwgd2l0aCBpdCBhbmQgZ2V0IG9uIHdpdGggdGhlaXIgbGl2ZXMuKTwvcD4KIAotPHA+PHU+MikgZ2NjK211c2wgPSBtdXNsLWNyb3NzLW1ha2U8L3U+PC9wPgorPGEgbmFtZT0iY3Jvc3MyIiAvPgorPHA+PGEgaHJlZj0iI2Nyb3NzMiI+MikgZ2NjK211c2wgPSBtdXNsLWNyb3NzLW1ha2U8L2E+PC9wPgogCiA8cD5UaGUgY3Jvc3MgY29tcGlsZXJzIEkgdGVzdCB0aGlzIHdpdGggYXJlIGJ1aWx0IGZyb20gdGhlCiA8YSBocmVmPWh0dHA6Ly9tdXNsLmxpYmMub3JnLz5tdXNsLWxpYmM8L2E+IG1haW50YWluZXIncwpAQCAtNTk4LDcgKzYwMCw4IEBACiB0aGF0IGluIG1rcm9vdCB5ZXQgYmVjYXVzZSBhIHN0YXRpYyBsaW5rZWQgbXVzbCBoZWxsbyB3b3JsZCBpcyAxMGsgb24geDg2CiAoNWsgaWYgc3RyaXBwZWQpLjwvcD4KIAotPHA+PHU+MykgbGx2bStiaW9uaWMgPSBBbmRyb2lkIE5ESzwvdT48L3A+Cis8YSBuYW1lPSJjcm9zczMiIC8+Cis8cD48YSBocmVmPSIjY3Jvc3MzIj4zKSBsbHZtK2Jpb25pYyA9IEFuZHJvaWQgTkRLPC9hPjwvcD4KIAogPHA+VGhlIDxhIGhyZWY9aHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vbmRrL2Rvd25sb2Fkcz5BbmRyb2lkCiBOYXRpdmUgRGV2ZWxvcG1lbnQgS2l0PC9hPiBwcm92aWRlcyBhbiBsbHZtIHRvb2xjaGFpbiB3aXRoIHRoZSBiaW9uaWMKZGlmZiAtLWdpdCBhL3d3dy9yb2FkbWFwLmh0bWwgYi93d3cvcm9hZG1hcC5odG1sCmluZGV4IGVhMTBmMTEuLjViN2E4ZGMgMTAwNjQ0Ci0tLSBhL3d3dy9yb2FkbWFwLmh0bWwKKysrIGIvd3d3L3JvYWRtYXAuaHRtbApAQCAtMTE2Nyw3ICsxMTY3LDcgQEAKIDxsaT48Yj5wc21pc2M8L2I+OiBraWxsYWxsIFtmdXNlcl0gW3BzdHJlZV0gW3BlZWtmZF0gW3BydHN0YXRdCiAobm90OiBwc2xvZyBwc3RyZWUueDExKTwvbGk+CiA8bGk+PGI+aW5ldHV0aWxzPC9iPjogZG5zZG9tYWlubmFtZSBbZnRwXSBob3N0bmFtZSBpZmNvbmZpZyBwaW5nIHBpbmc2IFt0ZWxuZXRdIFt0ZnRwXSBbdHJhY2Vyb3V0ZV0gKG5vdDogdGFsayk8L2xpPgotPGxpPjxiPmNvcmV1dGlsczwvYj46IFsgYmFzZTY0IGJhc2VuYW1lIHRydWUgY2F0IGNoZ3JwIGNobW9kIGNob3duIGNocm9vdCBja3N1bSBjb21tIGNwIGN1dCBkYXRlCis8bGk+PGI+Y29yZXV0aWxzPC9iPjogWyBiYXNlNjQgYmFzZW5hbWUgY2F0IGNoZ3JwIGNobW9kIGNob3duIGNocm9vdCBja3N1bSBjb21tIGNwIGN1dCBkYXRlCiBkZCBkZiBkaXJuYW1lIGR1IGVjaG8gZW52IGV4cGFuZCBmYWN0b3IgZmFsc2UgZm10IGZvbGQgZ3JvdXBzIGhlYWQgaG9zdGlkIGlkIGluc3RhbGwKIGxpbmsgbG4gbG9nbmFtZSBscyBtZDVzdW0gbWtkaXIgbWtmaWZvIG1rbm9kIG1rdGVtcCBtdiBuaWNlIG5sIG5vaHVwIG5wcm9jIG9kCiBwYXN0ZSBwcmludGVudiBwcmludGYgcHdkIHJlYWRsaW5rIHJlYWxwYXRoIHJtIHJtZGlyIHNlcSBzaGExc3VtIHNocmVkCmRpZmYgLS1naXQgYS93d3cvdG95Y2Fucy5wbmcgYi93d3cvdG95Y2Fucy5wbmcKaW5kZXggMWExMzNkYS4uZmNkMmEwZSAxMDA2NDQKLS0tIGEvd3d3L3RveWNhbnMucG5nCisrKyBiL3d3dy90b3ljYW5zLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCg==